1

对 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?

谢谢

4

1 回答 1

1

来自 UML 规范(2.4.1 上层结构,第 7.3.3 节):

memberEnd : 属性 [2..*] 每个端点代表连接到该端点的分类器实例参与关联的链接。这是一个有序的关联。子集命名空间::成员。

所以,像这样:

(...) -> forAll(a:Association|a.oclIsTypeOf(Coloured))->forAll(memberEnd->colour() = a.colour)

我怀疑这是准确的说法,但它应该让你朝着正确的方向开始。

您的图表也应该指定约束。只需在您的 Colored 原型上附上一个注释,说明如果实例是关联,则两个连接的类对象都必须具有相同的颜色属性。

于 2015-01-04T17:18:45.887 回答