next up previous contents
Next: Our model Up: The models Previous: Permissions.   Contents

The OKI model

Here, in C++ notation, is the OKI model:

class CourseManagementManager {
  // single instance class
  set<CanonicalCourse>   canonicalCourses;
  set<CourseGroup>       courseGroups;
  set<Type>              courseGroupTypes;
  set<Type>              courseTypes;
  set<Type>              gradeTypes;
  set<Type>              offeringTypes;
  set<Type>              sectionTypes;
  set<Type>              statusTypes;
  set<Type>              studentTypes;
  set<Term>              terms;
  set<Type>              termTypes;
} theCourseManagementManager;

class CanonicalCourse {
  set<CanonicalCourse>      canonicalCourses;
  set<CourseOffering>       courseOfferings;
  set<CanonicalCourse>&     equivalentCourses; // could be a CourseGroup
  set<String>               topics;
  float                     credits
  String                    description;
  String                    number;
  String                    title;
  // also needed
  set<CanonicalCourse>      prerequisites; // or course gp.  Omitted by OKI  
};

class CourseOffering {
  Id                        assetId;
  const CanonicalCourse     canonicalCourse; // shouldn't this be a set of eqvs
  set<CourseSection>        courseSections;
  Type                      status;
  String                    description;
  Type                      gradingOptionType;
  String                    number;
  const Term                term;
  String                    title;
};

class CourseSection {
  Type                      status;  // open, closed, etc.  Omitted by OKI.
  Id                        assetId; // rooms, labs, etc.  Should be set
  String                    description;
  Serializable              location;
  String                    number;
  set<Agent>                roster;
  set<ScheduleItem>         schedule;
  String                    title;
  set<CourseOffering>       courseOfferings;
  // also need
  enrollment limits etc.
};

class Term {
  set<ScheduleItem>         schedule;
};

class GradeRecord {
  const Agent&    agent;
  const CourseOffering&    courseOffering;
  Serializable    grade;
};

class CourseGroup {
  set<CanonicalCourse>  courses;  // a set of references.
};


// Grading

class GradingManager {
  set<Assignment>  assignments;
  set<GradeRecord> gradeRecords;
  set<Type>       gradeRecordTypes;
  set<Type>       gradeScales;
  set<Type>       gradeTypes;
  set<Type>       scoringDefinitions;
};

class Assignment {
  const CourseSection&  courseSectionId;
  String          description;
  String          displayName;
  const GradableObject&  gradableObject;  // what's assigned to be graded
  const Type      gradeScale;
  const Type      gradeType;
  const Type      scoringDefinition;
};

class GradeRecord {
  const Agent&    agent;
  const Assignment&  assignmentId;
  Serializable    gradeValue;
  const Agent&    modifiedBy;
  const Calendar  modifiedDate;
  const Type      gradeType;
};


// Assessments

class AssessmentManager{
  set<Assessment> assessments;
  set<AssessmentPublished> assessmentsPublished;
  set<AssessmentTaken>     assessmentsTaken;
  set<Evaluation> evaluations;
  set<Item>       items;
  set<Section>    sections;
  set<Type>       assessmentTypes;
  set<Type>       evaluationTypes;
  set<Type>       sectionTypes;
  set<Type>       itemTypes;
};

class Assessment {
  set<Section>    section;
  Serializable    data;
  String          description;
  String          displayName;
  String          topic;
};

class AssessmentPublished {
  const Assessment      assessment;
  set<AssessmentTaken>  assessmentsTaken;
  CourseSection&  courseSection;
  Serializable    data;
  const Calendar  date;
  String          description;
  String          displayName;
  Id              gradingAssignment;
};

class AssessmentTaken {
  set<Evaluation>            evaluations;  // summative from per-sections evals
  set<SectionTaken>          sectionsTaken;
  const AssessmentPublished& assessmentPublished;
  const Agent&               agent;  // student
  Serializable               data;
  const Calendar             date
};

class Evaluation {
  Serializable    data;
  const Agent&    modifiedBy;         // these should be expanded to lists
  const Calendar  modifiedDate;
  const ObjectTaken&    objectTaken;  // the item, section, or assessment
                                      // being evaluated
};                             

class Item {
  Serializable    data;               // answer, rubric, etc.
  String          description;
  String          displayName;
};

class ItemTaken {
  Serializable           data;
  set<Evaluation>        evaluations;
  const Item&            item;             // master copy of this item
  const SectionTaken&    sectionTaken;
};

class Section {
  set<Item>       items;            // questions/problems
  set<Section>    sections;         // subsections
  Serializable    data;             // whatever
  String          description;      
  String          displayName;
};

class SectionTaken {
  const Section&  section;       // master copy of this section
  set<Evaluation> evaluations;   // from evals of items & subsections taken
  Serializable    data;          // ?? grading formulae?
  set<ItemTaken>  itemsTaken;       
  set<SectionTaken> sectionsTaken;  // subsections taken
  const AssessmentTaken&  assessmentTaken;  // ? parent section or assessment
};



Tom Payne 2003-09-04