Ассоциация против агрегирования

Я просмотрел много информации об этих вещах, но не могу понять, в чем разница между ними? В 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

Кажется, есть некоторые дебаты о том, какое слово есть.

Он связан с отношениями между родителями и дочерними объектами и тем, что происходит с дочерними элементами при удалении родителя.

В одном сценарии говорится, что дети не имеют жизни вне жизни своего родителя, поэтому их следует удалить, когда родитель удален. Подумайте "УДАЛИТЬ КАСКАД" в внешних ключах и реляционных базах данных.

В другом сценарии говорится, что дети должны оставаться за пределами своих родителей, поэтому их нельзя удалять при удалении родителя.

Я оставлю его другим, чтобы утверждать, какое слово описывает каждую ситуацию.