UML: как реализовать класс ассоциации в Java

у меня есть этот класс Ассоциации UML. Обратите внимание: горизонтальная линия-сплошная линия, а вертикальная-пунктирная линия.

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

Я понимаю эту связь, но я столкнулся с некоторыми проблемами при реализации этого UML в коде. Я могу реализовать отношение между class Student и класс Course в коде. Вот мой код:

class Student {
  Vector<Course> b;
}

class Course {
   Vector<Student> a;
}

но, в классе Transcript, Я не так много понимаю, как использовать этот класс в коде. Это свойство обоих классов Student и Course. Итак, если это правда, то код будет:

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

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

это правда? Если это неправильно, пожалуйста, научите меня, как реализовать этот UML.

спасибо :)

3 ответов


прежде всего, не используйте Vector, так как это старый класс, который не должен использоваться больше 10 лет. Используйте Set или List.

если Transcript класс содержит информацию о том, как студент посещает курс (например, дату его подписки на курс), вы можете реализовать его следующим образом:

class Student {
    Set<Transcript> transcripts;
}

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

class Course {
    Set<Transcript> transcripts;
}

это не мешает вам предоставить метод в студенте, который возвращает все его курсы:

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

если Transcript не содержит никакой информации, то это, вероятно, там, чтобы смоделировать, как эти классы будут отображаться в таблицах базы данных, где единственный способ иметь связь "многие ко многим" между двумя таблицами-использовать таблицу соединения, содержащую идентификаторы двух связанных таблиц.


Я знаю, что этот вопрос очень старый, но у меня есть способ более удобный, чем вложение n..1 отношения в классе ассоциации :

public class Transcript {
    //Transcript's properties
} 

public class Course {

    private Map<Student, Transcript> transcriptsByStudent;
}

public class Student {

    private Map<Course, Transcript> transcriptsByCourse;
}

просто чтобы добавить, на вашей модели вы обозначаете множественность в классе ассоциации. Это не нужно, потому что класс ассоциации IS сама ассоциация и отношение множественности исходных двух классов будут удовлетворены.