Это случай ассоциации или агрегации?
Я нашел пример Java о том, как студенты регистрируются в ряде курсов:
Студент ----- принимает ------ курсы
и в примере определяется как объединение, но почему оно не может быть объединением? за то, что я вижу, каждый класс может существовать независимо. Как различить оба?
В вышеприведенном примере я имею дело со схемой, в которой в качестве атрибута у Ученика есть массив Курсов, а в Курсе также есть массив Студентов; так в таком случае это ассоциация, потому что оба они связаны, и агрегация, потому что одно содержится внутри другого?
4 ответа
Это не агрегация, поскольку курс не является набором студентов, а студент не является набором курсов. Это простая ассоциация "многие ко многим". Я также видел, что это смоделировано с помощью ассоциативного класса "enrolls", который включает в себя методы и данные, необходимые, чтобы позволить студенту записаться на курс. Примером агрегирования может быть то, как автомобиль существует в приложении кузовного цеха. Автомобиль имеет съемные части (шины, двигатель, шасси и т. Д.), Которые могут существовать независимо, но было бы полезно узнать, какие части еще существуют на конкретном автомобиле.
UML знает различные (под) типы ассоциаций, и агрегация является лишь одним из них. Ассоциация просто означает, что существует какая-то связь между источником и целью.
Вместо этого вы, вероятно, имеете в виду разницу между агрегацией и композицией. В агрегации агрегированные объекты могут существовать без целого; в то время как в композиции они не могут.
Вы должны определить имена в первую очередь.
Что такое курсы? Предмет? Или тема + лектор? Или предмет + лектор + класс / время?
Давайте назовем их Предмет, Курсы, Классы
И у нас есть лекторы, классы, студенты.
Вот диаграмма. (пожалуйста, обратите внимание, что отсутствие ошибок в соединении означает, что соединение является судоходным с обеих сторон)
Таким образом, связь между студентами и курсами ЗДЕСЬ зависит от многих. Вы можете реализовать это, имея агрегирование (например, списки) с обеих сторон или с одной из них. Первый вариант сложнее изменить, но легче читать. Но у вас должна быть агрегация, по крайней мере, с одной стороны.
Проще говоря, агрегация представляет собой контейнер, в котором контент может быть удален из контейнера и существовать сам по себе (если это невозможно, это композиция).
Здесь это не сдерживание, ученики не содержатся в классе, а классы не содержатся в ученике. Таким образом, это простая ассоциация
2 комментария:
- Когда объект содержится в другом, он не может содержаться в нескольких других. Таким образом, для агрегации множественность будет
1
или же0-1
на стороне контейнера. Вот0-*
с обеих сторон, которые никогда не могут быть агрегацией. - Агрегация - это особый случай ассоциации, поэтому в любом случае, если вы создадите ассоциацию, вы всегда будете правы (хотя в некоторых случаях не очень точны)