Дж. Рамбо, М. Блаха - UML 2.0 - Объектно-ориентированное моделирование и разработка (1158633), страница 20
Текст из файла (страница 20)
(Защищенные составляющие в)ага одновременно являются доступными в рамках пакета.) К закрытым составляющим (рггеаге) могут обращаться только методы класса-владельца. К составляющим, доступным в рамках пакета (раскайе), могут обращаться все методы того же пакета. Предпочтительная модель Рис. 4.4. Область действия атрибута В языке 1)М1. видимость обозначается при помощи префикса. Символ е ставится перед открытыми составляющими. Символ Ф ставится перед защищенными составляющими. Символ — ставится перед закрытыми составляющими.
Символ - ставится перед составляющими, доступными в рамках пакета. Отсутствие префикса не позволяет делать никаких заключений о видимости. При выборе значения видимости для какой-либо составляющей следует учитывать следующие соображения. ° Понятность модели. Чтобы получить представление о возможностях класса, необходимо понять все его открытые составляющие. Закрытые, защищенные и пакетные составляюгцие можно игнорировать: они вводятся лишь для удобства реализации. ° Расширяемость.
Открытые методы класса могут использоваться множест- вом других классов, поэтому изменение их сигнатуры (количества и типа 90 Глава 4 ° Углубленное моделирование классов аргументов, типа возвращаемого значения) может разрушить согласованность всей модели. Поскольку защищенные, закрытые и пакетные методы заведомо используются меньшим числом классов, их изменения обходятся дешевле. ° Контекст. Закрытые, защищенные н пакетные методы могут зависеть от предусловий или информации о состоянии, произведенной другими мето- дами того же класса. Вне своего контекста закрытые методы могут возвратить неверные результаты или привести к отказу объекта в целом.
4.2. Полюса ассоциаций Полюсом ассоциации называется ее конец. Бинарная ассоциация имеет два полюса, тернарная (см, раздел 4.3) — три и т. д. В главе 3 мы обсудили следующие свойства полюса ассоциации. ° Имя полюса. Полюс ассоциации может иметь имя. Имя позволяет разли- чать разные ссылки на один и тот же класс и упрощает навигацию. Часто удается подобрать осмысленные имена полюсов ассоциаций, которые оказываются полезными в своем контексте. Кратность. Для каждого полюса ассоциации можно указать кратность. Чаще всего используются следующие значения кратности: «1» (ровно один), «0..1» (не более одного) и «*» («много», то есть нуль и более). Упорядочение.
Объекты у полюса ассоциации с кратностью «много» обычно образуют обычное множество. Однако иногда объекты этого множества могут быть упорядочены. Мультимножества и последовательности. Объекты у полюса ассоциации с кратностью «много» могут образовывать мультимножество или последовательность.
Кввлификаторы. Квалификатор (атрибут полюса ассоциации) позволяет различать объекты, находящиеся у полюса ассоциации с кратностью «много». Агрегация. Полюс ассоциации может быть агрегацией или составляющей частью (см. раздел 4.4). Агрегацией может быть только бинарная ассоциация. Один из полюсов ассоциации должен быть агрегацией, а другой— составляющей частью. Изменяемость. Это свойство характеризует возможность обновления полюса ассоциации.
Возможные значения: сйаляеаЫе (может быть изменен) и геаг(ол(у (может быть только проинициализирован). Возможность навигации. С концептуальной точки зрения ассоциация может прослеживаться в любом направлении. Однако реализация может фактически поддерживать навигацию только в одном направлении. В 1)М(. возможность навигации в одном направлении обозначается стрелкой у полюса ассоциации, прикрепленной к целевому классу. Стрелки можно поставить у одного илн двух полюсов ассоциации или их можно не ставить вообще. 4.3.
й-арные ассоциации 91 ° Видимость. Полюса ассоциации могут иметь видимость, точно так же, как атрибуты и операции (см. раздел 4.1А). Возможные значения: риЫ1с (открытая), ргогесгег1 (защищенная), рпгтге (закрытая), расМабе (пакетная). 4.3.
й-арные ассоциации В главе 3 мы рассказывали только о бинарных ассоциациях. Однако иногда вам могут встретиться и п-арные ассоциации (ассоциации между тремя и более классами). Мы рекомендуем вам избегать использования и-арных ассоциаций в моделях: большинство из них могут быть разбиты на бинарные ассоциации с квалификаторами и атрибутами. На рнс. 4.5 показана ассоциация (Человек совершает покупку акции на бирже), которая с первого взгляда может показаться и-арной, но на самом деле может быть переформулнрована в виде двух бинарных ассоциаций. На атомарная п-«рная ассоциация «А рагаоп... т а сотрапуа ...
...можит быть параформулироаана тая: Рис. 4.5. Разбиение тернарной ассоциации на две бинарные На рис. 4.6 показана настоящая тернарная ассоциация, не сводимая к бинарным: программисты используют в проектах языки программирования. Эта ассоциация является атомарной и не может быть разделена на бинарные без потери информации. Программист может знать язык н участвовать в проекте, но не использовать этот язык в данном проекте. Диаарамма ялассоа Диаарамма акаамппяроа Рис. 4.6. и-арные ассоциации 92 Глава 4 ° Углубленное моделирование классов В 4)М1 для обозначения и-арных ассоциаций используется значок ромба, соединяемый с классами при помощи линий.
Имя ассоциации может быть указано около ромба и выделено курсивом. Полюса и-арной ассоциации могут иметь имена, точно так же, как и полюса бинарной ассоциации (рис. 4.6). Указание имен полюсов является обязательным, если класс участвует в п-арной ассоциации несколько раз. Проследить и-арную ассоциацию от одного полюса к другому невозможно, в отличие от бинарной ассоциации, поэтому имена полюсов не являются псевдоатрибутами участвующих в ассоциации классов.
Язык ОСЕ [ЪЧаппег-99] не имеет обозначений для прослеживания и-арных ассоциаций. На рис. 4.7 показана еше одна тернарная ассоциация: профессор читает курс лекций в течение семестра. Курс лекций характеризуется номером комнаты и произвольным количеством учебников. Рмс. 4.7. п-арные ассоциации тоже могут быть классами В обычных языках программирования нет средств для описания и-арных ассоциаций. Поэтому если вы собираетесь программировать свою модель, вам придется сделать и-арные ассоциации классами (Юе1шегепСйузу на рис. 4.8). Помните, что делая и-арную ассоциацию классом, вы изменяете смысл модели.
Х-арная ассоциация требует, что для каждой комбинации классов должно существовать не более одной связи. Например, для каждой комбинации Рго1езтог, 5етезгег и 7.игег1Соиузе на рис. 4.7 существует один класс Ве1шетег1Соигзе. Ассоциация, превращенная в класс, допускает любое количество связей: для каждой комбинации Р~о7езхот, зеулезтет и 7.снег1Соигзе на рис. 4.8 классов Ое1шегег1Соигзе может быть несколько.
При реализапии рис. 4.8 пришлось бы писать отдельный код для обеспечения уникальности 1)ейоетеоСоигзе. Рис. 4.8. Превращение л-арной ассоциации в класс ДА. Агрегацня 93 4.4. Агрегация Агрегация (аяягеяаг(оп) — это частный случай ассоциации, описываюший объекты, состоящие из частей. Составляющие являются частями агрегации. Агрегат с семантической точки зрения представляет собой расширенный объект, обрабатываемый многими операциями как единое целое, хотя физически он состоит из нескольких объектов.
Мы определяем агрегацию как отношение между классом-агрегатом и одним составляющим классом. Агрегат из составляющих частей разных типов должен моделироваться как несколько агрегаций. Например, газонокосилка состоит из ножа, двигателя, нескольких колес и корпуса. Здесь газонокосилка является агрегатом, а остальные детали — составляющими частями. Газонокосилка и нож образуют первую агрегацию, газонокосилка и двигатель — вторую и т. д.
Каждая пара классов определяется как отдельная агрегация, чтобы мы могли указывать кратность каждой составляющей части в агрегате. Это определение подчеркивает, что агрегацня является частным случаем бинарной ассоциации. Наиболее важным свойством агрегации является транзитивностья если А является частью В, а В является частью С, то А является частью С. Кроме того, агрегация антнсимметрична: если А является частью В, то В не является частью А.
Многие операции с агрегациями подразумевают транзитивное замыкание' и действуют как на непосредственные, так и на косвенные (вложенные) части. 4.4.1. Агрегация и ассоциация Агрегация — это частный случай ассоциации. Агрегация характеризуется дополнительным семантическим подтекстом. Если два объекта связаны отношением часть-целое, их следует моделировать при помощи агрегации. Если же объекты обычно рассматриваются как независимые, хотя между ними и может возникать связь, это будет ассоциация. Свой выбор вы можете проверить при помощи следуюших контрольных вопросов: ° Можно ли связать объекты словом «часть»? ° Применимы ли операции над целым к его частям? ° Распространяются ли некоторые атрибуты целого на его части? ° Обладает ли ассоциация внутренней антисимметричностью (один класс подчинен другому)? К агрегациям относятся спецификации материалов, детальные чертежи, а также разложения на составляюшие.