26

このUML Associationクラスがあります。注意: 水平線は実線で、垂直線は破線です。

 ---------                  ---------
|         |*(a)        *(b)|         |
| CLASS   |________________|  CLASS  |
|STUDENT  |     |          |  COURSE |
 ---------      |           ---------
                |*(c)
          ______|______
         |             |
         |             |
         |  CLASS      |
         | TRANSCRIPT  |
         |_____________|

この関係は理解していますが、この UML をコードに実装する際にいくつかの問題に遭遇しました。Studentクラスとクラスの関係Courseをコードに実装できます。これが私のコードです:

class Student {
  Vector<Course> b;
}

class Course {
   Vector<Student> a;
}

しかし、クラスTranscriptでは、このクラスをコードで使用する方法があまりわかりません。Studentクラスとの両方のプロパティですかCourse。したがって、それが true の場合、コードは次のようになります。

class Student {
  Vector<Course> b;
  Vector<Transcript> c;
}

class Course {
  Vector<Student> a;
  Vector<Transcript> c;
}

本当ですか?これが間違っている場合は、この UML の実装方法を教えてください。

ありがとう :)

4

3 に答える 3

37

まず、Vector は使用しないでください。これは 10 年以上使用されるべきではない古いクラスです。Setaまたは a のいずれかを使用しますList

クラスに学生がコースに参加する方法に関する情報 (たとえば、コースへのサブスクリプションの日付) が含まれている場合Transcript、次のように実装できます。

class Student {
    Set<Transcript> transcripts;
}

class Transcript {
    Student student;
    Course course;
    Date subscriptionDate;
}

class Course {
    Set<Transcript> transcripts;
}

これは、すべてのコースを返す Student でメソッドを提供することを妨げません。 

public Set<Course> getCourses() {
    Set<Course> result = new HashSet<Course>();
    for (Transcript transcript : transcripts) {
        result.add(transcript.getCourse());
    }
    return result;
}

情報が含まれていない場合Transcriptは、これらのクラスがデータベース テーブルにどのようにマップされるかをモデル化するためにおそらく存在します。2 つのテーブル間で多対多の関連付けを行う唯一の方法は、の ID を保持する結合テーブルを使用することです。関連する 2 つのテーブル。

于 2012-11-18T19:50:58.943 に答える