Фактически, большинство случаев ассоциаций в моделях классов UML не являются ни агрегатами, ни композициями. Например, связь между классами Publisher
и Book
для назначения книг, изданных издателем этому издателю, не является ни совокупностью, ни составом, поскольку книги, изданные издателем, не являются частями или компонентами этого издателя.
Агрегация - это особая форма ассоциации с предполагаемым значением отношения часть-целое, но без точной семантики (спецификация UML гласит: «Точная семантика совместной агрегации зависит от области приложения и моделирующего устройства»). Например, мы можем смоделировать агрегацию между классами Car
и Engine
и между классами Course
и Lecture
, поскольку двигатель является частью автомобиля, а лекция - частью курса.
Композиция (также называемая «составной агрегацией» в спецификации UML) - это особая форма агрегации, когда экземпляр компонента является частью не более одного агрегатного экземпляра за раз (то есть он не может совместно использоваться несколькими агрегатами). ). Это означает, что агрегация между Car
и Engine
является композицией (поскольку двигатель не может совместно использоваться двумя автомобилями одновременно), в то время как агрегация между Course
и Lecture
не обязательно является композицией, поскольку лекция может быть разделена на два курса (например, курс по управлению базами данных и курс по разработке программного обеспечения может разделить лекцию по UML). Это подразумевает, что кратность конца ассоциации композиции на стороне агрегации равна либо 1, либо 0, 1, в то время как она может быть * в случае некомпозитной агрегации.
В дополнение к этим основным характеристикам композиции (чтобы иметь эксклюзивные части), композиция может также иметь зависимость жизненного цикла между агрегатом и его компонентами, что означает, что при удалении агрегата удаляются все его части. с этим. Однако это относится только к некоторым случаям композиции, а не к другим, и поэтому оно не является определяющей характеристикой. Спецификация UML гласит: «Часть может быть удалена из составного экземпляра до того, как составной экземпляр будет удален, и, следовательно, не может быть удалена как часть составного экземпляра». В нашем примере композиции Car-Engine очевидно, что двигатель может быть снят с автомобиля до того, как автомобиль будет уничтожен, и в этом случае двигатель не будет разрушен и может быть использован повторно.