Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Uml Book (Rus).doc
Скачиваний:
15
Добавлен:
11.08.2019
Размер:
58.74 Mб
Скачать

Термины и понятия

Отношением (Relationship) называется связь между сущностями. В объектно-ориентированном моделировании особое значение имеют четыре типа отношений:

зависимости, обобщения, ассоциации и реализации. Отношения изображаются виде линий различного начертания.

Зависимости

Зависимостью (Dependency) называется отношение использования, опре­деляющее, что изменение в спецификации одной сущности (например, класса SetTopController) может повлиять на другую сущность, которая ее использует (в данном случае - на класс Channellterator), причем обратное в общем слу­чае неверно (см. главу 5). Графически зависимости изображают в виде пунктир­ной линии со стрелкой, направленной в сторону той сущности, от которой зави­сит еще одна. Применяйте зависимости, если хотите показать, что одна сущность использует другую.

Для большинства отношений использования вполне достаточно обычной за­висимости без каких-либо дополнений. Но если необходимо передать некий смыс­ловой нюанс, то стоит учесть, что в UML определен целый ряд стереотипов, при­менимых к зависимостям (о механизмах расширения UML см. главу 6). Всего существует 17 таких стереотипов, объединенных в шесть групп.

Прежде всего, это восемь стереотипов, применимых к отношениям зависимос­ти между классами и объектами на диаграмме классов (см. главу 8).

  • bind - определяет, что источник инстанцирует целевой шаблон с заданны­ми фактическими параметрами. Этот стереотип используют при моделиро­вании деталей шаблонов классов (см. главу 9). Например, отношения между шаблоном класса-контейнера и экземпляром этого класса моделируются Kai. зависимость bind. Стереотип bind должен содержать список фактически аргументов, соответствующих формальным аргументам шаблона;

  • derive - показывает, что источник может быть вычислен по целевому элемен­ту. С помощью этого стереотипа моделируют отношения между двумя атрибу­тами (см. главу 4 и 9) или ассоциациями (см. главу 5), причем один из соотно­симых элементов является конкретным, а другой - концептуальным. Скажем, класс Человек имеет атрибут ДатаРождения (конкретный) и атрибут Воз­раст (который может быть выведен из первого и потому не объявлен в классе отдельно). Отношения между ними можно определить с помощью зависимос­ти типа derive, при этом Возраст будет производным от ДатаРождения;

  • friend - указывает, что источнику даются специальные права видимости свойств цели (см. главу 5). Используйте этот стереотип для моделирования от­ношений, подобных отношениям между классом и его друзьями в языке C++;

  • instanceOf - говорит, что исходный объект является экземпляром целево­го классификатора;

  • instantiate - показывает, что источник создает экземпляры целевого эле­мента.

  • Последние два стереотипа позволяют явно моделировать отношения «класс/ объект» (см. главу 2). instanceOf применяется для моделирования отно­шения между классом и объектом на одной и той же диаграмме или же меж­ду классом и его метаклассом, instantiate указывает, какой элемент со­здает объекты другого;

  • powertype - означает, что все объекты целевого классификатора являются потомками заданного родителя. Этот стереотип применяется при моделиро­вании классов, содержащих другие классы, например при проектировании баз данных, о чем идет речь в главах 8 (логические базы данных) и 29 (физи­ческие базы данных).

  • refine - свидетельствует, что источник находится на более низком уровне абстракции, чем цель. Данный стереотип используется для моделирования концептуально одинаковых классов, рассматриваемых на различных уровнях абстракции. Так, класс Клиент, возникший на стадии анализа, будет уточнен в фазе проектирования, в результате чего появится более детальный класс Клиент вместе со своей реализацией;

  • use - показывает, что семантика исходного элемента зависит от семантики открытой части целевого. Этот стереотип позволяет явно указать, что зави­симость по своему типу принадлежит к отношениям использования, в отли­чие от отношений зависимости, обозначаемых другими стереотипами.

Следующая группа, состоящая из двух стереотипов, применяется для описа­ния отношений зависимости между пакетами (см, главу 12):

  • access - показывает, что исходный пакет имеет право ссылаться на элемен­ты целевого пакета;

  • import - вид доступа, определяющий, что открытое содержание целевого пакета входит в простое (неструктурированное) пространство имен источни­ка, как если бы оно было там объявлено.

Стереотипы access и import применяются для моделирования отношений между пакетами. Элементы двух равноправных пакетов не могут ссылаться друг на друга, если между ними явно не определена зависимость типа access или import. Допустим, например, что целевой пакет Т содержит класс С. Если опре­делить зависимость типа access от S к Т, то элементы S могут ссылаться на С, используя его полностью квалифицированное имя Т: : С. Если же от пакета S к Т определена зависимость типа import, то элементы S могут ссылаться на класс С, используя простые имена, то есть не квалифицируя имя целиком.

Два стереотипа применимы к отношениям зависимости между прецедентами (см. главу 16):

  • extend - показывает, что целевой прецедент расширяет поведение исходного;

  • include - говорит о том, что исходный прецедент явным образом включает ' в себя поведение целевого.

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

При моделировании взаимодействий между объектами (см. главу 15) исполь­зуют следующие три стереотипа:

  • become - сообщает, что целевой объект - тот же исходный, но в более по­здний момент времени и, возможно, с другими значениями, состоянием или ролями;

  • call - указывает, что исходная операция вызывает целевую;

  • copy - говорит, что целевой объект является точной, но независимой копи­ей исходного.

Стереотипы become и copy используются, чтобы показать роли, состояния или значения атрибутов одного объекта в различные моменты времени и в различных точках пространства (см. главу 23). Стереотип call применяется для моделиро­вания вызывающих зависимостей между операциями.

В контексте автоматов (см. главу 21) применяют только один стереотип.

  • send - определяет, что исходная операция посылает событие целевому объекту. Его используют для моделирования операций (например, входящей в состав действия, ассоциированного с изменением состояния), которые отправляют заданное событие целевому объекту (с ним, в свою очередь, может быть ассоциирован автомат). Фактически зависимости типа send позволя­ют связать вместе независимые автоматы.

Наконец, последний стереотип встречается в контексте организации элемен­тов системы в подсистемы и модели (см. главу 31).

trace - показывает, что целевой объект является историческим предшествен­ником исходного. Его применяют при моделировании отношений между эле­ментами различных моделей. Так, в контексте системной архитектуры (см, главу 2) прецедент из одноименного вида (представляющего функциональные требования) можно связать отношением трассировки с пакетом в виде с точки зрения проектирования (представляющем артефакты, которые реализуют этот прецедент).

Примечание Семантически все отношения, включая обобщения, ассоциации и реа­лизации, являются разновидностями отношений зависимости. Но обобщения, ассоциации и реализации обладают семантикой, доста­точно важной для того, чтобы рассматривать их как особые виды отношений. Между тем вышеперечисленные стереотипы, которые позволяют выразить семантические нюансы отношений зависимос­ти, не настолько далеки от простого отношения зависимости, что­бы выделять какой-то из них в особый вид отношений. Опыт пока­зывает, что подобный подход позволяет соблюсти баланс между возможностью подчеркнуть важные разновидности отношений и нежеланием смутить разработчика слишком большим числом ва­риантов выбора. Лучше всего, если вы начнете с моделирования обоб­щений, ассоциаций и реализации, а все остальные отношения будете рассматривать как вариации отношений зависимости.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]