OpenU.Ru
Ассоциация между тремя и более классами.
См. для сравнения: 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), чего лучше избегать.