class student { *attributes* } ;
class course { } ;
class semester { } ;
这三个类之间的关系是这样的
学生在一个学期上课。课程并不特定于学期。它可以由学生在任何学期选择。所以,这是这些对象之间的三元关系。
这三个类之间存在三元关联。如何实现这三个类之间的关联?或者,一般来说,实现类之间关联的可能方式是什么(在c ++或java中)?
答案 0 :(得分:2)
实现关联的方法有很多种。在你的情况下,你可以逃脱:
class student {
};
class course {
std::vector<student> students;
};
class semester {
std::vector<course> courses;
};
在更复杂的情况下,您可能需要复杂的数据结构,树或哈希表来表示关系。
答案 1 :(得分:2)
没有更多细节很难说,但从现实生活中的例子可以想象,有些课程是在一学期内完成的,而有些学生则选修一些课程。 student
类不需要了解course
的任何内容,course
类不需要了解students
的任何内容。也不需要知道semester
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
:课程在一学期中是独一无二的。当然,这些约束可以在其他非唯一数据结构之上手动应用。
答案 2 :(得分:0)
一种方式可能是集装箱运输,即将另一个类的对象作为一个类的成员。例如(假设学生需要5门课程)
class student{
//other members
course courseList[5];
};
答案 3 :(得分:0)
我在这种情况下的建议是让学期成为课程描述的一部分。然后看看使用multimap
将学生与学期特定课程结合起来。
对于关系数据库来说,这几乎听起来是一个很好的问题,根据应用程序的不同,您可能希望将数据关系转移到数据库。