Класс ассоциации, Агрегирование - Объектно-ориентированный подход и диаграммы классов в UML

Такой класс является обычным классом, присоединенным пунктирной линией к ассоциации. Его имя должно совпадать с именем ассоциации. Содержащаяся в нем информация уточняет и дополняет сведения об ассоциации.

Агрегирование

Если у роли ассоциации установлен атрибут "агрегирование", то вся ассоциация является отношением агрегирования. Такой атрибут может быть установлен только у одной из ролей.

Агрегирование (aggregation) - это отношение между классами типа целое/часть. Агрегируемый класс в той или иной форме является частью агрегата. На практике это может быть реализовано по-разному. Например, объект класса-агрегата может хранить объект агрегируемого класса, или хранить ссылку на него.

В UML допускается, что один класс агрегируется многими. При этом возможно два варианта. Первый - на диаграмме классов такая множественность означает лишь возможность для соответствующих объектов - т. е. агрегируемый объект может агрегироваться любым объектом, который принадлежит классам, агрегирующим класс данного объекта. Но объект не агрегируется многими объектами. Второй вариант - объект все-таки может агрегироваться несколькими объектами - так называемое каталожное агрегирование. Примером такого агрегирования может быть книга в библиотеке, которая принадлежит сразу многим каталогам.

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

Композиция - это специальный вид агрегирования (так называемое сильное агрегирование). В частности, агрегируемый объект может быть создан только тогда, когда создан агрегат, а с уничтожением агрегата уничтожаются и все агрегируемые объекты. Агрегируемый объект не разделяем, т. е. владеть им может только один агрегат.

Например, в ROOM существует еще более сильное агрегирование - там объекты, находящиеся внутри агрегата, невидны с наружи и сами не видят окружения своего агрегата (т. е. с ними нельзя устанавливать связи, им нельзя напрямую посылать сообщения и т. д.) и общаются с ним только через специальные точки входа - порты. В каждой предметной области, в каждом проекте у отношения агрегирования могут быть свои специфические свойства, которые можно реализовать как параметры кодогенерации для отношения агрегирования (такие поля для разных элементов модели имеются в Rose Rational - одной из самых известных реализаций UML).

Агрегирование изображается на диаграмме полым ромбом на конце линии ассоциации со стороны агрегирующего класса (агрегата).

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

Кроме того, UML допускает "вложенную" нотацию, в которой агрегируемый класс изображается внутри класса-агрегата. При этом перед его именем указывается имя роли и символ ':'.

Похожие статьи




Класс ассоциации, Агрегирование - Объектно-ориентированный подход и диаграммы классов в UML

Предыдущая | Следующая