Ограничение стереотипа OCL: Любая ассоциация, которая окрашена, все связанные классы имеют одинаковый цвет
Совершенно новый для OCL, спасибо за помощь.
Итак, у меня есть профиль со стереотипами, как показано:
Может кто-нибудь сказать мне, как написать инвариантное ограничение, которое говорит, что любая ассоциация, которая является Цветной, означает, что у всех связанных классов должно быть то же самое значение цвета в их свойстве цвета?
У меня было это до сих пор:
Context UML::InfrastructureLibrary::Core::Constructs::Association
inv: Association.allInstances() -> forAll(a:Association|a.oclIsTypeOf(Coloured) implies
a.associatedElement.colour = a.colour)
Я уверен, что это неправильно, потому что a.associatedElement не существует... но я не понимаю, как получить доступ к этим "всем подключенным классам" или что это значит. Возможно, мне нужно что-то вроде
a.[association].colour
?
Спасибо
1 ответ
Из спецификации UML (2.4.1 надстройка, раздел 7.3.3):
memberEnd: Property [2.. *] Каждый конец представляет участие экземпляров классификатора, связанного с концом, в ссылках ассоциации. Это заказная ассоциация. Подмножества Namespace::member.
Итак, как то так:
(...) -> forAll(a:Association|a.oclIsTypeOf(Coloured))->forAll(memberEnd->colour() = a.colour)
Я сомневаюсь, что это точное утверждение, но оно должно привести вас в правильном направлении.
Ваша диаграмма должна также указывать ограничение. Просто прикрепите примечание к своему цветному стереотипу, в котором говорится, что если экземпляр является ассоциацией, оба объекта класса должны иметь одинаковое свойство цвета.