Если кратность ассоциации описывается отношением «один ко многим», возникает проблема поиска. Если объект одного класса для выполнения отведенной ему роли в ассоциации должен выбрать конкретный объект другого класса, то он может сделать это на основе некоторого заданного атрибута. Этот атрибут обычно представляет собой идентификатор, а точнее, числовой идентификатор. Когда вы резервируете место в гостинице, вам присваивается номер заказа. Если нужно узнать о наличии зарезервированного места, необходимо сообщить номер заказа.
В UML идентифицирующая информация называется квалификатором. Он обозначается небольшим прямоугольником, который прилегает к обозначению класса, выполняющего поиск (рис. 37). Такое изображение позволяет эффективно свести кратность «один ко многим» к случаю «один к одному».
Рис. 37. Квалификатор ассоциации
Рефлексивные ассоциации
Иногда класс находится в ассоциации с самим собой. Этот вариант отношения, названный рефлексивной ассоциацией, может возникнуть в том случае, если объекты класса выполняют несколько ролей. Человек в машине может быть пассажиром или водителем. В роли водителя он везет одного или нескольких пассажиров (или не везет никого). На диаграмме этот случай отображается с помощью линии ассоциации, ведущей от прямоугольника класса к этому же прямоугольнику. На линии ассоциации, как и ранее, обозначаются роли, имя ассоциации, ее направление и кратность. Пример такой ассоциации представлен на рис. 38.
|
|
Рис. 38. Рефлексивная ассоциация