Диаграмма классов UML: состав против объединения - PullRequest
1 голос
/ 31 октября 2010

Я хочу понять разницу между составом и агрегацией отношений.

Кто-нибудь знает сайт, который объясняет диаграммы классов UML для всех отношений?

Ответы [ 3 ]

4 голосов
/ 31 октября 2010

Композиция и агрегация связаны с каскадным удалением.

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

Если родитель удален, нужно ли удалять и детей? Если да, вам нужна композиция.

Итак, допустим, у вас есть модель, в которой есть класс School, класс Building и класс Student. Школа имеет отношения «один ко многим» со зданием и отношения «один ко многим» со студентом.

Отношения между школой и зданием - пример композиции. Если вы закроете Школу, вы можете решить разрушить здания.

Отношения между школой - это агрегация. Если вы закроете школу, вы наверняка не решите убить всех учеников.

Вы можете прочитать, что об этом говорит дядя Боб Мартин здесь .

2 голосов
/ 31 октября 2010

Разница заключается в времени жизни частей объекта.

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

Композицию можно рассматривать как частный случай агрегации.

Согласно Руководству пользователя UML (глоссарий):

composition: A form of aggregation with strong ownership and coincident lifetime of the parts by the whole
1 голос
/ 31 октября 2010

И агрегация, и композиция представляют отношения "имеет". Разница между ними заключается в том, что состав относится к исключительной собственности. Например, транзакция «имеет» идентификационный номер транзакции, и эта транзакция является единственной транзакцией, которая имеет этот идентификационный номер транзакции, идентификационный номер которой исключает для транзакции. Транзакция также «имеет» дату транзакции, но многие транзакции также могут иметь такую ​​же дату транзакции. Поскольку дата транзакции может быть разделена между несколькими транзакциями, она не является исключительной .

Когда вы рисуете эти два типа отношений на диаграмме классов UML, композиционные отношения будут представлены с заполненным ромбом, где агрегационное отношение будет представлено ромбом, который не заполнен.

alt text

Книга Введение в программирование на Java охватывает эту тему очень подробно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...