Открытая коллекция знаний

OpenU.Ru

Справочник UML. Объектно-ориентированное проектирование.

association (ассоциация)

Семантическое отношение между двумя и более классификаторами, включающее в себя связи между их экземплярами.
См. association class; association end; association generalization; binary association; n-ary association.

Семантика

Ассоциация - это отношение между двумя или несколькими классификаторами, которое описывает связи между их экземплярами. Участвующие в ассоциации классификаторы занимают в ней определенные позиции, причем один и тот же класс может иметь в одной ассоциации разные позиции. Каждый экземпляр ассоциации (связь) представляет собой упорядоченный список ссылок на объекты. Рамки ассоциации определяются множеством таких связей. Объект может появляться несколько раз в одном множестве связей ассоциации и даже в одной связи (но в разных позициях), конечно, если это допускается определением ассоциации. Ассоциации являются "клеем", который связывает систему воедино. Без ассоциаций мы имели бы просто некоторое количество классов, неспособных взаимодействовать друг с другом.

Структура

У ассоциации может быть имя, однако основную информацию об ассоциации следует искать у ее полюсов, где описывается, каким образом каждый объект участвует в ассоциации. Не забудьте, что полюс ассоциации - это только часть ее описания, он не имеет отдельной семантики.
Имя. Ассоциация может иметь имя - строку текста, уникальную среди имен ассоциаций и классов, содержащихся в пакете-контейнере. (Класс-ассоциация является одновременно и классом, и ассоциацией, поэтому ассоциации и классы имеют общее пространство имен.) Впрочем, ассоциация может существовать и без имени, так как имена ролей у ее полюсов дают достаточно информации для того, чтобы идентифицировать ее среди других ассоциаций тех же классов. Существует соглашение, по которому имена читаются в той последовательности, в которой в списке появляются классы-участники ассоциации: Человек работает на Компанию, Продавец продает Машину клиенту.
Полюса ассоциаций. У ассоциации есть упорядоченный список, состоящий из двух или более полюсов ассоциации. (Под словом "упорядоченный" здесь мы имеем в виду, что полюса ассоциации различимы и не взаимозаменяемы.) Каждый из полюсов ассоциации определяет роль, которую играет данный класс в этой ассоциации. Один и тот же класс может играть несколько ролей, которые не являются взаимозаменяемыми. Каждый полюс ассоциации описывает свойства, применимые к конкретному объекту этой ассоциации, например, сколько раз один объект может появляться в связях (множественность), Некоторые свойства (такие как допустимость навигации) применимы только к бинарным ассоциациям, хотя большинство относятся и к бинарным и к n-арным ассоциациям.
См. более подробно в словарной статье association end.

Конкретизация

Связь - это экземпляр ассоциации, в котором есть слот для каждого из полюсов ассоциации. Слот содержит в себе ссылку на объект, который является прямым или непрямым экземпляром класса, заявленного в качестве класса для соответствующего полюса ассоциации. У связи нет иных идентификационных черт, кроме совокупности ссылок на связываемые объекты. В области действия ассоциации связи образуют комплект, в котором не может быть дубликатов. При этом количество появлений объекта должно быть совместимо указанной у каждого полюса ассоциации множественностью. Напримep, ассоциация Продать билеты объединяет множество билетов на одно представление. В этой ассоциации каждый билет может появляться только единожды, а вот представление - много раз, причем каждый раз с новыми билетами.
Связи могут появляться и исчезать в процессе работы системы, в соответствии с ограничениями изменений, указанными у полюсов ассоциации. В некоторых случаях возможно создание или изменение связи объекта только на одном полюсе ассоциации. Связь создается с помощью списка ссылок на объекты, собственных идентификационных черт у нее нет. Поэтому говорить об изменении значения связи бессмысленно. Вместо этого можно уничтожить одну связь и создать на ее месте другую. Кроме списка объектов связь с классом-ассоциацией имеет одно или несколько значений атрибутов, которые ее идентифицируют. Значения атрибутов могут быть изменены операциями. При этом ссылки на участвующие в ассоциации объекты сохраняются.

Нотация

Бинарная ассоциация изображается в виде непрерывной линии, соединяющей границы двух классов (рис. 22), а n-арная ассоциация - в виде ромба, соединенного с каждым из участвующих в ассоциации классом (рис. 129). В бинарной ассоциации ромб не используется, так как в нем нет необходимости. К одному классу может подходить несколько концов маршрутов.
Рис. 22. Ассоциации
Рис. 22. Ассоциации
Маршрут (path) состоит из одного или нескольких непрерывных сегментов, которые обычно изображаются прямой линией. Впрочем, кривые линии и дуги тоже допустимы, особенно в тех случаях, когда они указывают на само-ассоциацию, то есть на ассоциацию, в которой один и тот же класс появляется более одного раза. Сами по себе сегменты не имеют никакого семантического значения. Выбор типа линии для изображения маршрута остается за разработчиком.
См, path.
Около концов маршрута располагается описание того, каким образом класс принимает участие в ассоциации. Как правило, этот указатель помещается между маршрутом-линией и символом класса. Если на данном полюсе ассоциации должно существовать сразу несколько таких указателей, то они располагаются поочередно стрелка навигации, ромб агрегации или композиции и квалификатор (рис 23).
Рис. 
23. Последовательность указателей на полюсе ассоциации
Рис. 23. Последовательность указателей на полюсе ассоциации
Прочие обозначения, включая именные метки, помещаются возле тех элементов, к которым они относятся. Имена ролей размещаются у концов маршрута.
См. более подробную информацию, касающуюся нотации указателей, в статье энциклопедии association end.

Имя ассоциации

Имя ассоциации ставится возле маршрута, но во избежание путаницы, на достаточном удалении от его концов. Впрочем, запутаться может человек, так как инструмент моделирования создает невидимые глазом внутренние ссылки между символами. Таким образом, правильнее всего будет доверить выбор места для имени ассоциации инструменту моделирования. В много сегментной ассоциации имя ассоциации можно перетаскивать от одного сегмента к другому. Это не влечет за собой никаких изменений в семантике. Около имени ассоциации может стоять маленький закрашенный треугольник, указывающий на порядок классов, другими словами, в каком направлении следует "читать" имя ассоциации. На рис. 24 вы видите ассоциацию WorksFor (работает на). Между классом Person (Человек) и классом Company (Компания), рядом с именем ассоциации, стоит треугольник, который помогает правильно "прочесть" ассоциацию: "Человек работает на Компанию". Обратите внимание на то, что треугольник является всего лишь элементом нотации, который указывает на порядок расположения полюсов ассоциации. В модели все полюса ассоциаций упорядочены сами по себе, поэтому имя ассоциации не несет эту смысловую нагрузку.
Стереотип ассоциации указывается в кавычках ("") и ставится перед именем ассоциации или вместо него. Список свойств можно поместить после имени ассоциации или под ним.
Рис. 24. Имя ассоциации
Рис. 24. Имя ассоциации
Класс-ассоциация
Класс-ассоциация изображается в виде символа класса, который присоединяется к маршруту ассоциации при помощи пунктирной линии. В n-арной ассоциации пунктирная линия соединяет символ класса и ромб ассоциации. Свойства, соответствующие классу, указываются в символе класса, а свойства, соответствующие ассоциации, - возле маршрута ассоциации. При этом не стоит забывать, что вы моделируете единый элемент, хотя используете при этом две различные графические конструкции.
См. более подробную информацию в статье энциклопедии association class.
Ограничение "исключающее или" (Хог)
Ограничение {хог} связывает две или более ассоциаций, которые одним полюсом крепятся к единому (базовому) классу. Экземпляр базового класса может участвовать только в одной ассоциации, связанной этим ограничением. При этом нужно обратить внимание на множествснносгь выбранной ассоциации. Если множественность включает в себя кардинальное число 0, тогда у экземпляра базового класса может и не быть ассоциативной связи, в противном случае это невозможно.
На диаграмме ограничение {хог} изображается в виде пунктирной линии, связывающей две или более ассоциаций, имеющих одни общий класс. Возле пунктирной линии ставится строка ограничения {хог} (рис. 25). Имена ролей на различных полюсах маршрута должны быть различными.
Рис. 
25. Ассоциация исключающее "или"
Рис. 25. Ассоциация исключающее "или"

Обсуждение

У ассоциации не всегда есть имя. Иногда более удобно использовать имена ролей, так как они предоставляют имена для навигации и генерации кода. Кроме этого, имена ролей не нуждаются в указаниях, в каком направлении их следует читать. Если у ассоциации есть имя, оно должно быть уникальным в рамках пакета. Если же у нее нет имени, а между парой классов или несколькими классами существует несколько ассоциаций, то их различают с помощью имен ролей. В случае когда между классами существует только одна ассоциация, для ее идентификации достаточно имен классов.
Можно сказать, что имена ассоциации лучше всего использовать тогда, когда ассоциация соответствует концепции реального мира, например Женитьба или Работа. Если же ассоциация нуждается в указателях, то лучите использовать имена ролей, у которых невозможно перепутать порядок прочтения.
См. статью энциклопедии transient link, в которой обсуждается моделирование экземпляра такого отношения, которое существует только в течение выполнения одной процедуры.
См. статью энциклопедии composition, где приводится пример обобщения с использованием двух ассоциаций.
Стандартные элементы
implicit (неявный), persistence (персистентность), xor (исключающее "или").

Алфавитный указатель