define Program class
additional documentation in the comments