Это случай ассоциации или агрегации?

Я нашел пример Java о том, как студенты регистрируются в ряде курсов:

Студент ----- принимает ------ курсы

и в примере определяется как объединение, но почему оно не может быть объединением? за то, что я вижу, каждый класс может существовать независимо. Как различить оба?

В вышеприведенном примере я имею дело со схемой, в которой в качестве атрибута у Ученика есть массив Курсов, а в Курсе также есть массив Студентов; так в таком случае это ассоциация, потому что оба они связаны, и агрегация, потому что одно содержится внутри другого?

4 ответа

Это не агрегация, поскольку курс не является набором студентов, а студент не является набором курсов. Это простая ассоциация "многие ко многим". Я также видел, что это смоделировано с помощью ассоциативного класса "enrolls", который включает в себя методы и данные, необходимые, чтобы позволить студенту записаться на курс. Примером агрегирования может быть то, как автомобиль существует в приложении кузовного цеха. Автомобиль имеет съемные части (шины, двигатель, шасси и т. Д.), Которые могут существовать независимо, но было бы полезно узнать, какие части еще существуют на конкретном автомобиле.

UML знает различные (под) типы ассоциаций, и агрегация является лишь одним из них. Ассоциация просто означает, что существует какая-то связь между источником и целью.

Вместо этого вы, вероятно, имеете в виду разницу между агрегацией и композицией. В агрегации агрегированные объекты могут существовать без целого; в то время как в композиции они не могут.

Вы должны определить имена в первую очередь.

Что такое курсы? Предмет? Или тема + лектор? Или предмет + лектор + класс / время?

Давайте назовем их Предмет, Курсы, Классы

И у нас есть лекторы, классы, студенты.

Вот диаграмма. (пожалуйста, обратите внимание, что отсутствие ошибок в соединении означает, что соединение является судоходным с обеих сторон)

введите описание изображения здесь

Таким образом, связь между студентами и курсами ЗДЕСЬ зависит от многих. Вы можете реализовать это, имея агрегирование (например, списки) с обеих сторон или с одной из них. Первый вариант сложнее изменить, но легче читать. Но у вас должна быть агрегация, по крайней мере, с одной стороны.

Проще говоря, агрегация представляет собой контейнер, в котором контент может быть удален из контейнера и существовать сам по себе (если это невозможно, это композиция).

Здесь это не сдерживание, ученики не содержатся в классе, а классы не содержатся в ученике. Таким образом, это простая ассоциация

2 комментария:

  • Когда объект содержится в другом, он не может содержаться в нескольких других. Таким образом, для агрегации множественность будет 1 или же 0-1 на стороне контейнера. Вот 0-* с обеих сторон, которые никогда не могут быть агрегацией.
  • Агрегация - это особый случай ассоциации, поэтому в любом случае, если вы создадите ассоциацию, вы всегда будете правы (хотя в некоторых случаях не очень точны)
Другие вопросы по тегам