На этом шаге рассмотрим имена полюсов ассоциации и квалификаторы.
Роль абстракции — это ее грань, которой она обращена к внешнему миру в конкретный момент времени. Роль определяет цель или силу взаимодействия между классами. В примере, изображенном на рис. 1, роль отражается с помощью имени полюса ассоциации, написанного рядом с пиктограммой класса.
Рис.1. Имена сторон ассоциации и квалификаторы
На рис. 1 показано, что классы PlanAnalyst и Nutritionist делают вклад в работу класса CropEncyclopedia. Это значит, что они поставляют информацию для этой энциклопедии. Класс PlanAnalyst является пользователем энциклопедии, поскольку он выполняет поиск информации. В каждом случае роль клиента идентифицирует поведение объекта и протокол, используемый клиентом и его сервером в ходе исполнения роли. Обратите внимание на то, что класс PlanAnalyst имеет рефлексивную ассоциацию, поскольку существует несколько экземпляров этого класса, взаимодействующих друг с другом и использующих отдельные протоколы, отличающиеся от протокола ассоциации с классом CropEncyclopedia.
Этот пример демонстрирует также ассоциацию между классами CropEncyclopedia и Crop, которая изображается с помощью квалификатора, показанного в маленьком квадратике возле класса CropEncyclopedia. Квалификатор — это атрибут, однозначно идентифицирующий отдельный целевой объект.
В данном примере класс CropEncyclopedia использует в качестве квалификатора атрибут scientificName, обеспечивающий доступ к отдельным элементам множества экземпляров класса CropEncyclopedia. В целом квалификатор должен быть атрибутом объекта, являющегося частью агрегата на целевой стороне ассоциации. Хотя квалификаторы могут быть многократными, их значение должно быть уникальным. Без квалификатора кратность объектов класса Crop обозначается символом *.
На следующем шаге рассмотрим ограничения.