class student { *attributes* } ;
class course { } ;
class semester { } ;
这三个类之间的关系是这样的
学生在一个学期学习课程。课程并不特定于学期。学生可以在任何学期选择。所以,这是这些对象之间的三元关系。
这三个类之间存在三元关联。如何实现这三个类之间的关联?或者,一般来说,实现类之间关联的可能方法是什么(在 c++ 或 java 中)?
有很多方法可以实现关联。在你的情况下,你可以逃脱:
class student {
};
class course {
std::vector<student> students;
};
class semester {
std::vector<course> courses;
};
在更复杂的情况下,您可能需要复杂的数据结构、树或哈希表来表示关系。
没有更多细节很难说,但从现实生活中的例子可以想象,有些课程是在一个学期内开设的,有些学生会参加一些课程。该类student
不需要知道任何关于course
s 的信息,该类也不需要知道任何关于 s 的course
信息students
。也不需要知道semester
s。一个自然的组合是给一个s列表的semester
映射:course
student
class semester
{
public:
// accessors: list of courses, list of students, list of students for
// a given course... all obtainable from map.
private:
std::map<course, std::set<student>> enrollment;
};
在这里我std::set
为学生使用一个,因为学生在每门课程中都是独一无二的。同样对于std::map
:课程在一个学期中是独一无二的。当然,这些约束可以在其他非唯一数据结构之上手动应用。
一种方式可以是集装箱船,即让另一个类的对象作为一个类的成员。例如(假设一个学生修了 5 门课)
class student{
//other members
course courseList[5];
};
在这种情况下,我的建议是将学期作为课程描述的一部分。然后看看使用multimap
.
对于关系数据库来说,这听起来几乎是一个好问题,根据应用程序,您可能希望将数据关系外包给数据库。