Иногда ассоциация между двумя классами должна удовлетворять некоторому правилу. Это правило заключается в размещении ограничения возле линии ассоциации. Например, Банковский Служащий обслуживает клиентов по очереди. Этот факт отражается в модели с помощью фразы {по очереди} в фигурных скобках возле класса Клиент – для отражения ограничения (рис. 32).
Рис. 32. Ограничения на ассоциацию
Другой тип ограничения представляется отношением ИЛИ, которое обозначается с помощью пунктирной линии, соединяющей две линии ассоциаций с надписью {или}. Модель на рис. 33 показывает студента, выбирающего бюджетную или коммерческую форму обучения.
Рис. 33. Отношение ИЛИ между двумя ассоциациями
Связи
Ассоциация (как и класс) характеризуется наличием экземпляров. Если представить себе конкретного игрока, играющего в конкретной команде, отношение «Играет в» называется связью,которую изображают в виде линии, соединяющей два объекта. Имя этой связи, как и имя объекта, подчеркивается (рис. 34).
Рис. 34. Связь как элемент ассоциации
Кратность
Ассоциация между объектами Игрок и Команда предполагает, что два класса находятся в отношении «один к одному». Здравый смысл подсказывает, что это не единственный вариант взаимосвязи. В баскетбольной команде пять человек, не считая запасных игроков. Ассоциация «Включает» должна учитывать этот факт. С другой стороны, игрок может играть только в одной команде, что должно учитываться в ассоциации «Играет в».
Рис. 35. Кратность связи
Приведенные отношения являются примерами разной кратности, которая означает количество объектов одного класса, связанных с одним объектом другого. Чтобы представить это количество на диаграмме, определенное число можно поместить над линией ассоциации возле соответствующего класса, как это сделано на рис. 35.
Рис. 36. Возможные значения кратности
В этом примере приведен только один из вариантов кратности. Возможны также и другие значения кратности. Один класс может быть связан с другим различными способами: «один к одному», «один ко многим», «один к нескольким», «один к ограниченному интервалу» (например, «один к 5..10»), «один к заданному количеству» (как в рассматриваемом примере) или «один к набору» (например, «один к 9 или 10»).
Для представления понятия «много» в UML используется символ звездочки (*). Логическое ИЛИ передается двумя обозначениями: с помощью двух точек (1.. *), что означает «один или более», или запятой (5,10), что означает «5 или 10». На рис. 36 показаны изображения возможных значений кратности.
Если класс А находится в отношении «один к 0 или 1» с классом Б, то последний называется необязательным для класса А.