Я просмотрел много информации об этих вещах, но не могу понять, в чем разница между ними? В Fowler UML Distilled говорит, что Aggreagation абсолютно бессмысленна, поэтому автор рекомендует не использовать его в диаграммах. Объясните, пожалуйста, когда я должен использовать каждый из них и как это повлияет на код Java.
Ассоциация против агрегирования
Ответ 1
Это очень спорный вопрос. Как объясняет Martin в ответе, заказ агрегирует Продукт. И это можно считать верным. Грейди Буч в своем "объектно-ориентированном анализе и дизайне" приводит аналогичный пример для ассоциации - продажа связана с продуктами в этой продаже и наоборот. И продажа не объединяет продукты. Таким образом, все примеры должны быть специфичными для домена, поскольку с другой точки зрения ассоциация может стать более конкретной. Другим примером является составление документов с использованием параграфов.
Таким образом, все в этой области сильно зависит от контекста. Это ООП.
Вы можете попытаться применить свои знания к конкретному проекту, который вы собираетесь проектировать. Я бы рекомендовал вам прочитать книгу Грэди Буча, если вы еще этого не сделали. С тех пор было написано много книг, но это все еще Библия OO *.
Ответ 2
Существует четыре вида отношений класса
- Ассоциация: использует
Пример: человек класса использует ручку класса - Агрегация: имеет
Пример: у человека класса есть автомобиль класса (автомобиль все еще там, когда Человек умирает) - Состав: владеет
Пример: классный человек владеет классом сердца (когда человек die, Heart die) - Наследование: -
Пример: человек класса - человек класса (человек - человек).
Связь между классами объектов
Наследование > Состав > Aggregation > Ассоциация
Ответ 3
Ассоциация означает, что у двух классов есть какие-то отношения, может быть что-то действительно.
Состав и агрегация - это два вида ассоциаций. Самый простой способ отличить их - это думать о том, "насколько тяжело" отношения. Подумайте, что произойдет, когда вы удалите объект владельца.
Агрегация, агрегированный объект продолжает жить. (Think order ↔ продукт продолжает работать).
Состав, агрегированный объект умирает вместе с владельцем. (Думайте абзацы ↔ документ, абзацы умирают вместе с документом).
Можно утверждать, что агрегация бессмысленна, поскольку нет существенной разницы между рисованием линии с не заполненной стрелкой (ассоциацией) и линией с незаполненным алмазом (агрегацией). Отношения очень похожи. Линия с заполненным алмазом (состав), однако, очень отличается.
Ответ 4
Состав UML, агрегация и простая ассоциация - это семантические концепции, а не концепции программирования. Смысл их можно понять следующим образом:
- Состав: A состоит из B; B является частью A и, следовательно, не может существовать без A
- Агрегация: A принадлежит B, B принадлежит A
- Ассоциация: A использует B, A связан с B определенным образом
(Состав и агрегация - это специальные типы ассоциаций.)
В Java вы можете реализовать их все одинаково. Это концептуальная разница.
Ответ 5
Ассоциация - это любая связь между классами, где экземпляры одного класса имеют ссылку на поле для экземпляра другого класса.
Состав - это "более сильное" отношение, означающее, что один экземпляр (родительский) "владеет" другим (дочерним).
Это агрегирование, которое не имеет никакой дополнительной семантики, отличной от ассоциации.
Подробнее здесь: http://martinfowler.com/bliki/AggregationAndComposition.html
EDIT: вы можете добавить некоторую специальную семантику к символу агрегации, например "Может принадлежать максимум одному родителю за раз, но может менять родителей или быть сиротой". Тем не менее, такие расширения являются вашими собственными и не определены в UML, насколько я знаю.
Ответ 6
Кажется, есть некоторые дебаты о том, какое слово есть.
Он связан с отношениями между родителями и дочерними объектами и тем, что происходит с дочерними элементами при удалении родителя.
В одном сценарии говорится, что дети не имеют жизни вне жизни своего родителя, поэтому их следует удалить, когда родитель удален. Подумайте "УДАЛИТЬ КАСКАД" в внешних ключах и реляционных базах данных.
В другом сценарии говорится, что дети должны оставаться за пределами своих родителей, поэтому их нельзя удалять при удалении родителя.
Я оставлю его другим, чтобы утверждать, какое слово описывает каждую ситуацию.