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 сама ассоциация и отношение множественности исходных двух классов будут удовлетворены.