Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Типы связей между классами



Чтобы на диаграмме показать взаимодействие классов, между ними необходимо обозначить связь. Возможны связи следующих типов: ассоциации, зависимости, агрегации и сообщения.

Ассоциация (association) определяет логическую связь между классами. В UML одна ассоциация может специфицировать связь между двумя и несколькими классами. Ассоциации первого типа называются бинарными, а второго типа ‑ N -арными.

Бинарная ассоциация (binary association) характеризует логическую связь между двумя классами. Возможна также связь класса с самим собой, которая называется рефлексивной ассоциацией. Изображается ассоциация в виде сплошной линии, соединяющей символы классов. Каждая ассоциация, как и любая связь, обладает направлением или в терминах UML - ролью (association role). Ролей может быть две, чтобы иметь возможность подчеркнуть возможные различия во «взаимоотношениях» между классами, например у «Начальника» могут быть сосредоточены все права, а у «Подчиненного» - только обязанности.

Рядом с линией, изображающей ассоциацию, мотут быть следующие пометки:

- имя ассоциации определяет необязательное имя ассоциации;

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

Роль(association role) - неотделимая часть ассоциации, описывающая роль класса в данной ассоциации. У роли могуг быть следующие свойства:

- имя роли - строка, стоящая рядом с концом линии ассоциации, причем, поле не обязательное, но если имя задано, то оно должно отображаться на диаграмме;

- навигация в направлении роли означает, что партнеры ассоциации могут просматривать объекты, соответствующие этой роли. Если в направлении, соответствующем роли есть навигация, то на конце линии может быть изображена стрелка;

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

- квалификатор представляет собой список атрибутов класса с противоположного конца линии ассоциации, по значениям которых можно однозначно разбить множество объектов этого класса на подмножества. Используется для связи объекта класса-партнера ассоциации с группой объектов другого класса-партнера ассоциации;

- агрегация показывает, что ассоциация является отношением типа целое/часть.

Множественность (multiplicity) показывает возможное количество объектов, которые могут быть связаны в соответствии с этой ассоциацией. Множественность указывается для ролей ассоциации и имеет следующий формат (см. рис. 9.9):

<нижняя граница>.. <верхняя граница>

Рис. 9.9

Верхняя граница и нижняя граница указывают минимальное и максимальное количество объектов, участвующих в ассоциации. Если для верхней границы стоит символ «*», то это значит, что она бесконечна.

Пример

0..1

0.. *

3..5,10..20,100,200.. *

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

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

Рис. 9.10

Квалификатор, приведенный на рис. 9.10, можно трактовать, как ограничение на использование трассы машинами с определенным весом, и на количество одновременно проезжающих по этой трассе машин.

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

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

Рис. 9.11

В некоторых случаях два и более элемента модели могут быть семантически связаны. Например, класс А использует методы класса В. При изменении класса В необходимо произвести соответствующие изменения в классе А. Поэтому в нотации UML предусмотрено такое отношение, как зависимость (dependency).

Для рассмотренного примера на диаграмме классов необходимо указать, что класс А зависит от класса В. Отношение зависимости является универсальным, если с помощью него можно связывать различные типы сущностей UML. Зависимость изображается пунктирной линией, проведенной между двумя элементами диаграммы, и считается, что элемент, «привязанный» к концу стрелки, зависит от элемента, «привязанного» к началу этой стрелки. Зависимость может быть снабжена именем и спецификатором. Существуют следующие виды зависимостей:

- trace показывает историческую связь между двумя элементами, которые представляли одно и то же понятие на разных этапах;

- refine - историческая связь между элементами, как правило, показывает, что один элемент как бы произошел от другого;

- uses - ситуация, когда один элемент модели использует другой;

- bind - устанавливается между шаблоном и экземпляром шаблона;

- friend - аналог ключевого слова С++friend.

Наследование (inheritance) - это отношение типа «общее-частное» между элементами модели. Наследование обозначается сплошной линией, идущей от частного элемента к более общему (в терминологии ООП - от потомка к предку или от подкласса к суперклассу). Со стороны более общего элемента рисуется большой полый треугольник.

Один из атрибутов отношения наследования ‑ дискриминатор (discriminator) ‑ строка, задающая имя группы потомков. Его использование полезно, если у данного класса много потомков, и необходимо разбить их на несколько групп. Отсутствие дискриминатора означает, что дискриминатор - пустая строка (дискриминатор по умолчанию). Изображается дискриминатор текстовой строкой, стоящей возле линии наследования, как это показано на рис. 9.12.

Рис. 9.12





Дата публикования: 2014-11-18; Прочитано: 1973 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.009 с)...