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

このような3つのクラス間の関係 学生、コース、学期のUML図

学生は学期にコースを受講します。コースは学期に固有のものではありません。学生はどの学期でも選択できます。したがって、これはこれらのオブジェクト間の三項関係です。

これらの3つのクラスの間には3進の関連があります。これらの3つのクラス間の関連付けを実装するにはどうすればよいですか?または、一般的に、クラス間の関連付けを実装するための可能な方法は何ですか(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について何も知る必要はなく、クラスcourseはについて何も知る必要はありませんstudents。どちらもsについて知る必要はありませんsemester。自然な構成は、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

1つの方法は、コンテナ船、つまり、あるクラスのメンバーとして別のクラスのオブジェクトを持つことです。例(学生が5つのコースを受講すると仮定)

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

この場合の私の提案は、学期をコースの説明の一部にすることです。次に、を使用して学期固有のコースに対して学生を組み合わせる方法を検討しますmultimap

リレーショナルデータベースにとっては良い問題のように思えますが、アプリによっては、データベースへのデータリレーションシップをファームアウトすることをお勧めします。

于 2013-03-07T07:32:41.600 に答える