问题描述
|
我在这里感到困惑的是,在这种情况下如何在此处制作对象。
我正在使用iPhone App。
假设我有2个主要实体,STUDENTS和SUBJECTS,现在这里有多对多基数。我要跟踪每个学生在每个科目中获得的所有分数。
所以数据库表变成这样的3
学生
科目
学生标记-(描述学生和学科的关联)
现在,ERD对我很清楚,但是我在这里对OO建模感到困惑,我需要在这里创建哪些对象/类,它们将如何交互?
请有人可以向我解释。
提前致谢。
编辑:
只有两个班怎么能满足我的要求?让我解释:
班级科目包含与该科目特别相关的所有属性,例如科目名称,学时,所教课程等。
班级学生有其自己的特定属性,例如姓名,年龄,就读的班级等。
现在我在哪里存储该信息,StudentA在SubjectA中获得了90分。就像在DB的情况下一样,我还有另一个表,如m-m关系。
所以我的问题是,我是否也应该创建该第3个表的类,像上面那样说STUDENTMARKS,因为主要学生或主题对象无法保存所有信息,例如studentA..to ... StudentZ已注册SubjectA,而所有这些学生对象包含在“主题对象”中,但是每个学生的成绩存储在何处,因为学生对象没有“ marks”属性,因为成绩与学生不直接/仅相关。
考虑到Obj-C可以有人对此进行详细的类化。
解决方法
一对多,学生类将具有学科的ArrayList,而学科将具有学生的ArrayList ...如果您一年两次提供特定学科,则每个学期对象中都将包含学生列表。
public class Student{
private ArrayList<Subject> current;
private ArrayList<Subject> passed;
...
}
public class Subject{
private ArrayList<Student> enrolled;
private ArrayList<Student> passed;
...
}
快乐编码
欢迎来到OO World!
发行后,
你可以有。学生类内部的HashMap作为属性。
喜欢
private HashMap<Subject,Integer> transcript....
这里Subject是关键,Integer是学生获得的分数。如果您想从某个特定对象的机密物体上获得分数,可以这样做,
S1.getScore(subject)
其中s1是Student对象,subject是Subject类的对象。
在学生类中,您可以添加以下方法:
public Integer getScore(Subject sub){
return transcript.get(sub);
}
我很抱歉缩进不正确,因为我是通过移动设备编写的;)
,怎么样(假设使用C#):
public class StudentMarks
{
public Student Student { get; set; }
public Subject Subject { get; set; }
public decimal Mark { get; set; }
}
public class Student
{
public string Name { get; set; }
}
public class Subject
{
public string Name { get; set; }
}