(****************** Student *************************) object Student components: Name, Id, Major, MailAddress; operations: ChangeMailAddress ; description: (* a person taking a class *); end Student ; operation ChangeMailAddress inputs: Student, MailAddress; outputs: Student; description: (* changes the address *); end ChangeMailAddress; (******************** Class *****************************) object Class components: ClassName, Student*, Teacher, Date, Section, Grade*, GradeTemplate, CourseGrade; operations: AddStudent, RemoveStudent, ChangeGrade, FindStudent, GetGrade; description: (* foo *); end Class; operation ChangeGrade inputs: c:Class, s:Student, gi:GradeableItem, g:Grade; outputs: c':Class; precondition: FindStudent(c, s) and FindGradableItem(c, gi) and InRange(gi, g); postcondition: g = GetGrade(c', s, gi); end ChangeGrade; operation GetGrade inputs: c:Class, s:Student, gi:GradeableItem; outputs: g:Grade; precondition: FindStudent(c, s) and FindGradableItem(c, gi); postcondition: g = c.GradeableItem.Student.Grade; description: (* foo *); end GetGrade; operation RemoveStudent inputs: c:Class, s:Student; outputs: c':Class; precondition: FindStudent(c, s); postcondition: not FindStudent(c', s); description: (* foo *); end RemoveStudent; operation AddStudent inputs: c:Class, s:Student; outputs: c':Class; precondition: not FindStudent(c, s); postcondition: FindStudent(c', s); description: (* foo *); end AddStudent; operation FindStudent inputs: c:Class, s:Student; outputs: b:boolean; precondition: ; postcondition: b = s in c.Student; description: (* foo *); end FindStudent; (********************* GradeableItem ********************************) object GradeableItem components: Name, wieght, Scheme, min, max; operations: ; description: (* foo *); end GradeableItem; (* * The following three are atomic objects. The four built-in atomic types are * string, number, boolean, and opaque. *) object Name = string; object Grade = number; object ClassName = string; object Section = string; object Date ; object Id = number; object Title = string; object MailAddress ; object TestTool ;