|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Агрегация
Отношения агрегации между классами аналогичны отношениям агрегации между объектами. Повторим пример с описанием класса КонтроллерУгла: with Класс_ГрафикРазворота. Класс_РегуляторУгла; use Класс_ГрафикРазворота, Класс_РегуляторУгла; Package Класс_КонтроллерУгла is type укз_наГрафик is access all ГрафикРазворота; type Контроллеругла is tagged private: procedure Обрабатывать (the: in out Контроллеругла; yr: укз_наГрафик); function Запланировано (the: КонтроллерУгла; уr: укз_наГрафик) return Секунда; private type КонтроллерУгла is tagged record регулятор: РегуляторУгла; … end Класс_КонтроллерУгла; Видим, что класс КонтроллерУгла является агрегатом, а экземпляр класса РегуляторУгла — это одна из его частей. Агрегация здесь определена как включение по величине. Это — пример физического включения, означающий, что объект регулятор не существует независимо от включающего его экземпляра КонтроллераУгла. Время жизни этих двух объектов неразрывно связано. Графическая иллюстрация отношения агрегации по величине (композиции) представлена на рис. 9.13. Рис. 9.13. Отношение агрегации по величине (композиция)
Возможен косвенный тип агрегации — включением по ссылке. Если мы запишем в приватной части класса КонтроллерУгла: … private type укз_наРегуляторУгла is access all РегуляторУгла; type КонтроллерУгла is tagged record регулятор: укз_наРегуляторУгла; … end Класс_КонтроллерУгла; то регулятор как часть контроллера будет доступен косвенно. Теперь сцепление объектов уменьшено. Экземпляры каждого класса создаются и уничтожаются независимо. Еще два примера агрегации по ссылке и по величине (композиции) приведены на рис. 9.14. Здесь показаны класс-агрегат Дом и класс-агрегат Окно, причем указаны роли и множественность частей агрегата (соответствующие пометки имеют линии отношений). Как показано на рис. 9.15, возможны и другие формы представления агрегации по величине — композиции. Композицию можно отобразить графическим вложением символов частей в символ агрегата (левая часть рис. 9.15). Вложенные части демонстрируют свою множественность (мощность, кратность) в правом верхнем углу своего символа. Если метка множественности опущена, по умолчанию считают, что ее значение «много». Вложенный элемент может иметь роль в агрегате. Используется синтаксис роль: имяКласса. Рис. 9.14. Агрегация классов
Рис. 9.15. Формы представления композиции
Эта роль соответствует той роли, которую играет часть в неявном (в этой нотации) отношении композиции между частью и целым (агрегатом). Отметим, что, как представлено в правой части рис. 9.15, в сущности, свойства (атрибуты) класса находятся в отношении композиции между всем классом и его элементами-свойствами. Тем не менее в общем случае свойства должны иметь примитивные значения (числа, строки, даты), а не ссылаться на другие классы, так как в «атрибутной» нотации не видны другие отношения классов-частей. Кроме того, свойства классов не могут находиться в совместном использовании несколькими классами. Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.003 сек.) |