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

OpenU.Ru

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

n-ary association (n-арная ассоциация)

Ассоциация между тремя и более классами.
См. для сравнения: binary association.

Семантика

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

Нотация

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

Пример

На рис. 129 изображена запись для игры футбольной команды в каждом сезоне с указанием конкретного вратаря. Считается, что вратарь может переходить в течение сезона из одной команды в другую и появляться в отчетах различных команд. Каждая связь в книге записей будет изображаться в виде отдельной строки.

Рис. 129. Троичная ассоциация, которая одновременно является массой-ассоциацией

Стилистические указания

Как правило, линии-маршруты выходят из углов ромба или из середины его сторон.
Обсуждение
Множественность n-арной ассоциации определяется, исходя из других (п-1) ее полюсов. Предположим, например, что между классами (А, В, С) существует троичная ассоциация. Множественность, стоящая у полюса С, указывает, сколько объектов этого класса могут участвовать в ассоциации с конкретной парой объектов классов А и В. Если множественность имеет вид ("много, много, единица"), то каждой паре объектов А и В соответствует уникальное значение С. Паре объектов В и С соответствует "много" значений А. В ассоциации может участвовать "много" значений классов А, В и С. В бинарной ассоциации это правило редуцировано, поскольку указывается только множественность каждого полюса ассоциации, определяющаяся с учетом другого полюса.
Указывать множественность только у одного полюса ассоциации (как предлагают некоторые) бессмысленно, потому что для любой значимой n-арной ассоциации это будет множественность "много". В противном случае из ассоциации можно выделить бинарную ассоциацию между отдельным классом и классом-ассоциацией, который включает в себя все оставшиеся классы. Этот вариант будет и более точным, и более эффективным при реализации.
Вообще, n-арных ассоциаций, по возможности, лучше избегать - бинарные ассоциации проще реализовывать, к тому же они допускают навигацию, n-арные ассоциации более удобны только в том случае, когда для определения связи необходимы все значения у полюсов. Практически во всех случаях n-арная ассоциация реализуется в виде класса, в атрибуты которого входят указатели на участвующие в ассоциации объекты. Преимущество моделирования класса в виде класса ассоциации заключается в том, что в этом случае вступает в силу ограничение на дубликаты, то есть в этой ассоциации не будет двух одинаковых связей.
Возьмем, к примеру, студента (Student), который в течение семестра посещает курс (Course) лекций какого-то профессора (Professor) (рис. 130). Студент не станет посещать точно такой же курс лекций, который читает другой профессор, однако он может посещать несколько различных курсов у первого профессора. Профессор, соответственно, может читать несколько разных курсов. Все множественности указаны на диаграмме. Множественность у класса Professor (Профессор) опциональна (0..1), другие же представляют собой неограниченную множественность "много" (0..*).

Рис. 130. Множественность для n-арной ассоциации
Каждое значение множественности связано с парой объектов на других полюсах ассоциации. Паре (Course, Student) соответствует нуль или один Professor. Паре (Student, Professor) - "много" Course, а паре (Course, Professor) - "много" Student.
Обратите внимание, что если эта ассоциация воплощается в обычном классе, то возможно существование нескольких копий одной и той же комбинации (Student, Course, Professor), чего лучше избегать.

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