Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Углубленное моделирование агрегации и делегирования

Поиск

Агрегация представляет собой третий метод связывания классов в моделях анализа

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

Агрегация (и ее боле сильный вариант — композиция) - отношение включения. Составной класс содержит один или более компонентных классов. Компонентный класс является элементом одного или более составных классов. Можно выделить четыре возможных семантики для агрегации:

1 Агрегация типа “Безраздельно обладает”.

2 Агрегация типа “Обладает”.

3 Агрегация типа “Включает”.

4 Агрегация типа “Участник”.

Агрегацию типа Безраздельно обладает можно представить в UML как композицию-стереотип, дополнительно ограниченную с помощью ключевого слова frozen (замороженный). Ограничение применяется к компонентному классу. Оно констатирует, что объект компонентного класса не может быть заново соединен (в течение своего ЖЦ) с другим составным объектом. Компонентный объект может быть удален вовсе, но не может переключиться на другого владельца.

 

 

Рисунок 5.9. Агрегация типа Безраздельно обладает

 

Объект Chapter (Глава) является частью, по меньшей мере, одного объекта Book (Книга). Будучи включенным в составной объект, он не может быть повторно соединен с другим объектом Book.

Колода карт для игры в бридж (BridgeCardPack) содержит пятьдесят две карты. Каждая карта для бриджа (объект BridgeCard) принадлежит в точности одной колоде карт (BridgeCardPack) и не может быть еще раз соединена с другой колодой карт.

Агрегацию типа Обладает можно выразить в UML с помощью композиции (заполненный ромб) или агрегации (пустой ромб). В каждый момент времени компонентный объект принадлежит, по меньшей мере, одному составному объекту, однако он может быть заново соединен с другим составным объектом. При удалении составного объекта его компонентные объекты также удаляются (рис. 5.10).

 

Рисунок 5.10. Агрегация типа Обладает

На рис. 5.10 показано два примера агрегации типа Обладает. Вода (объект Water) может быть перелита из одного кувшина (объект Jug) в другой. Аналогично, шина (объект Tire) может быть переставлена с одного велосипеда (Bicycle) на другой. Разрушение объекта Jug или Bicycle распространяется вниз на их компонентные объекты.

Для моделирования агрегации типа Включает в UML обычно используется ссылочная семантика агрегации (пустой ромб). Агрегация типа Включает не содержит зависимости по существованию - удаление составного объекта не распространяется автоматически вниз на компонентные объекты. Объект ГруппаСтудентов включает в себя объекты Студент. Разрушение группы не влияет на Студентов, они могут быть включены в другую группу.

Агрегация типа Участник допускает отношения с кратностью “многие ко многим”. Ее можно моделировать в UML только с помощью агрегации (пустой ромб). Объекты Студенты являются участниками объекта Лекция. Студент может посещать разные лекции, лекцию посещают разные студенты (отношение многие ко многим).

Агрегация является альтернативой обобщению. Обобщение - это отношение суперкласс-подкласс (общее - частное). Агрегация больше напоминает отношение супермножество–подмножество (целое - часть). Вопреки этому различию обобщение можно представить как агрегацию (рис. 5.11).

 

Рисунок 5.11. Обобщения или агрегация

Заказы клиентов, которые не выполнены, могут ожидать некоторых дальнейших действий. Заказ в состоянии ожидания может быть отложенным ожидания может быть заказом наперед, если он должен быть выполнен позднее, в сроки, определенные клиентом. Модель в левой части рисунка представляет собой обобщение заказов клиентов.

Заказ в состоянии класс Order (Заказ) может быть классом PendingOrder (Ожидающий заказ). Класс PendingOrder может быть классом BackOrder (Невыполненный заказ) или классом FutureOrder (Заказ, выполняемый в будущем). Наследование гарантирует разделение атрибутов и операций вниз по дереву обобщения.

Аналогичную семантику можно смоделировать с помощью агрегации, показанной в правой части рисунка 5.11. Классы BackOrder и FutureOrder включают атрибуты и операции класса PendingOrder, которые, в свою очередь, включает класс Order.

Обобщение использует наследование для реализации его семантики. Агрегация использует делегирование для повторного использования реализации компонентных объектов. Вычислительная модель наследования основана на понятии класса. Однако можно положить в основу вычислительной модели понятие объекта. Всякий раз, когда составной объект (внешний объект) не в состоянии выполнить задание самостоятельно, он может вызвать методы одного из его компонентных объектов (внутренних объектах) — это называется делегированием (delegation). При подходе, основанном на делегировании, функциональные возможности системы реализуются с помощью включения (клонирования) функций существующих объектов во вновь требуемые функции.

 

 



Поделиться:


Последнее изменение этой страницы: 2021-01-08; просмотров: 120; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.147.48.105 (0.006 с.)