4
class student { *attributes* } ;
class course {  } ;
class semester { } ;

这三个类之间的关系是这样的 学生、课程、学期的UML图

学生在一个学期学习课程。课程并不特定于学期。学生可以在任何学期选择。所以,这是这些对象之间的三元关系。

这三个类之间存在三元关联。如何实现这三个类之间的关联?或者,一般来说,实现类之间关联的可能方法是什么(在 c++ 或 java 中)?

4

4 回答 4

2

有很多方法可以实现关联。在你的情况下,你可以逃脱:

class student {
};

class course {
   std::vector<student> students;
};

class semester {
   std::vector<course> courses;
};

在更复杂的情况下,您可能需要复杂的数据结构、树或哈希表来表示关系。

于 2013-03-07T07:09:00.337 回答
2

没有更多细节很难说,但从现实生活中的例子可以想象,有些课程是在一个学期内开设的,有些学生会参加一些课程。该类student不需要知道任何关于courses 的信息,该类也不需要知道任何关于 s 的course信息students。也不需要知道semesters。一个自然的组合是给一个s列表的semester映射:coursestudent

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:课程在一个学期中是独一无二的。当然,这些约束可以在其他非唯一数据结构之上手动应用。

于 2013-03-07T07:30:12.943 回答
0

一种方式可以是集装箱船,即让另一个类的对象作为一个类的成员。例如(假设一个学生修了 5 门课)

class student{
  //other members
  course courseList[5];
};
于 2013-03-07T07:03:08.350 回答
0

在这种情况下,我的建议是将学期作为课程描述的一部分。然后看看使用multimap.

对于关系数据库来说,这听起来几乎是一个好问题,根据应用程序,您可能希望将数据关系外包给数据库。

于 2013-03-07T07:32:41.600 回答