object Time is string; object Test is Name, TotalTime, TotalPoints, NumberQuestions, Question*, TStatus; object TStatus is string; op previewTest is inputs: n:Name; outputs: t:Test; pre: (* There exists a test with a name *); postcondition:( t.Name=n ); description: (* The selected test name will show the test in a new window *); end previewTest; op selectClass inputs: cn:ClassName; outputs: c:Class; pre: (* There is a Class*); post:(* Roster loaded in view window *); description: (* The program will show the class roster in the class window *); end selectTest; op beginTest is inputs: n:Name*; outputs: Test*; pre: Test.TStatus = "unbegun"; post: Test.TStatus = "In Progress"; description: (* The selected test will begin *); end beginTest; op endTest is inputs: t:Test*; outputs: AnsweredTest*; pre: (* Test.TStatus = unbegun *); post:(* Test.TStatus = False *); description: (* The selected test will be collected *); end endTest; op gradeTest is inputs: AnsweredTest*; outputs: GradedTest*; pre: (* Test answered and finished *); post: ; description: (* The selected test will be collected *); end gradeTest; op loadTime is inputs: tm:Time; outputs: tm; pre: (* TotalTime needs to be changed *); post:( tm'=tm+nt ); description: (* The Timer will display adjusted time *); end changeTime; op addOneMin is inputs: tm:Time; outputs: tm'; pre: (* TotalTime needs to be changed *); post:( tm'=tm+1 ); description: (* The Timer will display adjusted time *); end addOneMin; op addFiveMin is inputs: tm:Time; outputs: tm'; pre: (* TotalTime needs to be changed *); post:( tm'=tm+5 ); description: (* The Timer will display adjusted time *); end addFiveMin; op addTenMin is inputs: tm:Time; outputs: tm'; pre: (* TotalTime needs to be changed *); post:( tm'=tm+10 ); description: (* The Timer will display adjusted time *); end addTenMin; op lessOneMin is inputs: tm:Time; outputs: tm'; pre: (* TotalTime needs to be changed *); post:( tm'=tm-1 ); description: (* The Timer will display adjusted time *); end lessOneMin; op lessFiveMin is inputs: tm:Time; outputs: tm'; pre: (* TotalTime needs to be changed *); post:( tm'=tm-5 ); description: (* The Timer will display adjusted time *); end lessFiveMin; op lessTenMin is inputs: tm:Time; outputs: tm'; pre: (* TotalTime needs to be changed *); post:( tm'=tm-10 ); description: (* The Timer will display adjusted time *); end lessTenMin; op freezeTest is inputs: TestName*; outputs: TestInProgress'*; pre: (* InProgress = false *); post:(* InProgress = true *); description: (* The selected test will not be editable *); end freezeTest; op unFreezeTest is inputs: TestName*; outputs: TestInProgress'*; pre: (* InProgress = true *); post:(* InProgress = false *); description: (* The selected test will be editable (unfrozen) *); end unFreezeTest; object GradedTest inherits from AnsweredTest components: TotalGrade; end GradedTest; object TotalGrade is integer; object GradedQuestion inherits from AnsweredQuestion components: Grade, Comment; end GradedQuestion; object Grade is integer; object Comment is string;