非常感谢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
?
由于
答案 0 :(得分:1)
根据UML规范(2.4.1超结构,第7.3.3节):
memberEnd:Property [2 .. *]每一端表示在关联的链接中连接到末尾的分类器实例的参与。这是一个有序的关联。子集Namespace :: member。
所以,像这样:
(...) -> forAll(a:Association|a.oclIsTypeOf(Coloured))->forAll(memberEnd->colour() = a.colour)
我怀疑这是确切的陈述,但它应该让你开始朝着正确的方向发展。
您的图表也应指定约束。只需在您的彩色构造型上附上一个注释,说明如果实例是一个关联,则连接的类对象必须具有相同的颜色属性。