(********************************************************************* * * * Top Level Objects * * * *********************************************************************) object StudentGrader components: StudentMenu; description: (* This is the Grader program that the students will run. This version of grader will not allow changes to be made to grades or curves outside of the context of what-if kinds of questions. These what-if questions are not saved. The StudentGrader will also not show student names (other than the student currently running the program) and it will not have access to the TeacherGrader functions like RosterDownload and GradeUpload. *); end StudentGrader; object TeacherGrader components: TeacherMenu; description: (* This is the Grader program that the teachers will run. This version of grader will allow roster downloads, additions to the rosters, full grade change and browse functionality (including all student names), curve value setting and grade template management. *); end TeacherGrader; object LoginScreen components: ; description: (* The login screen asks for a usre name and an id. These values are looked up in a IdDatabase for user validation. The IdDatabase can contain any Name->Id associations and any Name->Id association in the IdDatabase entered into the LoginScreen will be return a valid user status. *); end LoginScreen; object IdDatabase components: UserId*; description: (* This the collection of valid users of Grader. *); end IdDatabase; object UserId components: Name and Id; end UserId; object StudentIdDatabase extends IdDatabase components: ; description: (* The list of valid student users of StudentGrader. *); end StudentIdDatabase; object TeacherIdDatabase extends IdDatabase components: ; description: (* The list of valid teacher users of TeacherGrader. *); end TeacherIdDatabase; operation GetUserId inputs: LoginScreen; outputs: Name, Id; description: (* This screen actually asks the user for their name and Id for validation. It does not do the validation. That is the job of the IdDatabase. *); end GetUserId; operation ValidateUser inputs: Name, Id, IdDatadase; outputs: boolean; (* Looks the Name, Id pair up in the database and returns true iff the name->Id pair match an entry exactly; false otherwise. *) end ValidateUser; (********************************************************************* * * * MenuObjects * * * *********************************************************************) (********************************************************************* * * * Object Classes * * * *********************************************************************) object GradeSetDisplay components: Title, GradeSet; description: (* Knows how to display and allow modifications to a set of grades (a GradeSet). *); end GradeSetDisplay; object Histogram extends GradeSetDisplay components: ; description: (* Knows how to take a GradeSet and draw a histogram. *); end Histogram; object BarGraph extends GradeSetDisplay components: ; description: (* Knows how to take a GradeSet and draw a bar graph. *); end BarGraph; object PieChart extends GradeSetDisplay components: ; description: (* Knows how to take a GradeSet and draw a pie chart. *); end PieChart; (********************************************************************* * * * Non-Atomic Objects * * * *********************************************************************) object TestTool components: GradeSet*; description: (* The TestTool is another application that can provide grades in a download operation to Grader. *); end TestTool; object Grade components: Name and Points; description: (* A Grade is a score on a GradeableItem. *); end Grade; object GradeSet components: GradeSet*, Grade*, Name; description: (* A set of grades belonging to a assignment, final grades, etc. *); (* A GradeSet is recursive because it is used as a grouping container for types of grades - as in Homework, Tests, etc. *) end GradeSet; object CurveDefinition components: Points*; description: (* A CurveDefinition is a set of thresholds that define where grade ranges begin and end. *); end CurveDefinition; object Roster components: Student* and Class and Section and Date; description: (* A Roster is a collection of students registered for a class section for a quarter/semester/year/whatever. *); end Roster; object Student components: Name and Id; description: (* defines a student. *); end Student; object AdminDB components: Roster*, GradeSet; description: (* The complete set of Rosters for the school. *); end AdminDB; (********************************************************************* * * * Roster Operations * * * *********************************************************************) operation AddStudent inputs: Roster, Student; outputs: Roster; description: (* Adds a new student to a roster. *); end AddStudent; operation DeleteStudent inputs: Roster, Name; outputs: Roster; description: (* If Name is in the Roster then the Student is removed from the Roster. *); end DeleteStudent; operation FindStudent inputs: Roster, Name; outputs: Student; description: (* Looks in the Roster for the Name. If the Name is found then the appropriate Student is returned. *); end FindStudent; operation PrintRoster inputs: Roster; outputs: Roster; description: (* Prints out the Students in the roster. *); end PrintRoster; (********************************************************************* * * * AdminDB Operations * * * *********************************************************************) operation DownloadRoster inputs: AdminDB, Class, Section, Date; outputs: Roster; description: (* Downloads a roster for a class/section/date. *); end DownloadRoster; (* Should this be a Roster operation or an AdminDB op. And if it stays an AdminDB op, can you really specify more than one output? *) operation UpdateRoster inputs: AdminDB, Roster; outputs: AdminDB, Roster; description: (* Updates the Roster with the most recent class list. *); end UpdateRoster; operation UploadGrades inputs: AdminDB, Roster, GradeSet; outputs: AdminDB; description: (* Uploads the grades for the Class. *); end UploadGrades; (********************************************************************* * * * GradeSetDisplay Operations * * * *********************************************************************) operation ZoomIn inputs: GradeSetDisplay, GradeSet; outputs: GradeSetDisplay; description: (* The GradeSetDisplay zooms in its current GradeSet to view the new GradeSet. This operation would be used in the following way: A GradeSetDisplay is up and one of the items in the display is a grade grouping like 'Homework' (a nested GradeSet). If the user gestures to ZoomIn, the GradeSetDisplay switches to show the 'Homework' GradeSet. *); end ZoomIn; operation DownloadGrades inputs: TestTool, GradeableItem, Roster; outputs: GradeSet; description: (* A GradeableItem (a test, assignment, etc) and a Roster is passed to the TestTool to download a set of Grades for that class *); end DownloadGrades; (* * The following three are atomic objects. The four built-in atomic types are * string, number, boolean, and opaque. *) object Name = string; object Points = number; object Class = string; object Section = string; object Date = string; object Id = number; object Title = string; object InstructorRoster components: HeaderInfo, GradeSet*, Stats; end InstructorRoster;