OpenU.Ru
Имя полюса ассоциации.
См. pseudoattribute.
Семантика
Имя роли служит для идентификации полюса ассоциации, а также для навигации
от одного объекта к другому при помощи ассоциации.
Поскольку имя роли можно использовать для двух различных целей, оно должно быть
уникальным сразу в двух пространствах имен.
Все имена ролей в данной ассоциации должны отличаться друг от друга, В самоассоциации
(ассоциации, где одни и тот же класс задействован более одного раза) имена ролей
обязательны, так как иначе можно перепутать полюса ассоциации, прикрепленные
к одному и тому же классу. Во всех других случаях имена ролей необязательны,
так как полюса ассоциации можно различать по именам прикрепленных к ним объектов.
Кроме этого, имя роли используется для навигации от одного объекта к другим,
связанным с ним посредством данной ассоциации. Каждый класс
"видит"- присоединенные к нему ассоциации и может использовать их
для поиска объектов, которые связаны с одним из его экземпляров. Имя роли, стоящее
у того полюса ассоциации, который находится около соседнего класса, принято
использовать для выражения навигации. Это выражение служит для доступа к объекту
или множеству объектов, связанных друг с другом посредством данной ассоциации.
На рис. 158 класс В связан с классом А посредством ассоциации "один-ко-многим",
а с классом С - ассоциацией "один-к-одному". Возьмем объект bb из
класса В - тогда с помощью выражения bb.theA можно получить множество объектов
класса А, а с помощью выражения bb.theC - один объект класса С. В принципе имя
роли на дальнем полюсе ассоциации подобно псевдоатрибуту класса, - то есть его
можно использовать в качестве части выражения доступа, с помощью которого прослеживается
ассоциация.
Имя роли можно использовать в качестве атрибута для получения значений, поэтому
оно входит в пространство имен того класса, который находится на дальнем полюсе
ассоциации. Оно находится в том же самом пространстве имен, что и имена атрибутов,
причем как имена ролей, так и имена атрибутов должны быть в нем уникальны. Атрибуты
и имена ролей ассоциаций могут передаваться путем наследования, поэтому имена
атрибутов и псевдоатрибутов должны быть уникальны также и среди унаследованных
имен. Имя роли, прикрепленное к классу-предку, можно использовать для навигации
в классе-потомке. В примере с рис. 158 выражение bb.аnЕ допустимо, поскольку
класс В наследует имя роли аnЕ у класса D.
Если ЬЬ: Sand dd: D
"bb.theA- - множество объектов класса А "bb.theC" - один экземпляр
класса С
"ЬЬ.аnЕ" - один экземпляр класса Е Выражение "dd.theC недопустимо,
если только dd не является В
Рис. 158. Навигация по ассоциациям
Имена ролей и имена ассоциаций необязательны в том случае, если ассоциация каким-то
обратом уже уникально идентифицирована. Например, ассоциацию можно идентифицировать
только по ее имени или только по имени ролей на ее полюсах. И те, и другие имена
указывать необязательно, хотя это разрешено. В случае с единственной бинарной
ассоциацией можно опустить как имена ролей, так и имя ассоциации. В принципе
имя роли требуется для выражения навигации. На практике инструмент моделирования
может иметь правило создания неявных имен ролей (для этого он использует имена
связанных ассоциацией классов).
Нотация
Имя роли изображается в виде строки текста, разметенной у полюса ассоциации,
где она упирается в прямоугольник класса. Если имя роли уже указано, скрыть
его невозможно. Оно может иметь указатель видимости - стрелку, которая указывает,
может ли элемент на дальнем полюсе ассоциации "видеть" элемент, прикрепленный
к имени роли.