OCL allInstances() 函数
OCL allInstances()
当时我学习了一点OCL,遇到了以下问题,我找不到正确的答案。我查看了 OCL 2.4 Spec 上的文档,但我什么也没找到,这似乎回答了我的问题:
主要是allInstances()实例使用如下:
context 人物 inv:
Person.allInstances().forAll(p : Person | p.employeeNumber <> self.employeeNumber)
其中 Person 是具有属性 employeeNumber.
的 class
是否也允许在自身和其他属性上使用 allInstances(),并且具有相同的属性,例如 .allInstances() ?
您触及了 OCL 规范中较为模糊的区域之一。 allInstances() 是一种类型操作,因此可能被认为是静态的,但 static 关键字是在 OCL 2.2 中添加的,没有任何明确的语义或示例。
基于 Eclipse OCL Pivot 的实现原型解决了模糊性。 OclElement::allInstances() 在 /org.eclipse.ocl.pivot/model/OCL-2.5.oclstdlib 中建模为静态操作,因此源必须是类型。
如果您调用 self.allInstances(),您会得到“'Class' 而不是 'Object' 所需的值”。
如果你调用 self.oclType().allInstances() 你会得到更有趣的东西。
注意。实现 oclType() 以支持全反射是另一个规范说明。
如果你想要 OCL 实现之间的可移植性,坚持使用 Person.allInstances()->isUnique(employeeNumber).
当时我学习了一点OCL,遇到了以下问题,我找不到正确的答案。我查看了 OCL 2.4 Spec 上的文档,但我什么也没找到,这似乎回答了我的问题:
主要是allInstances()实例使用如下:
context 人物 inv: Person.allInstances().forAll(p : Person | p.employeeNumber <> self.employeeNumber)
其中 Person 是具有属性 employeeNumber.
的 class是否也允许在自身和其他属性上使用 allInstances(),并且具有相同的属性,例如
您触及了 OCL 规范中较为模糊的区域之一。 allInstances() 是一种类型操作,因此可能被认为是静态的,但 static 关键字是在 OCL 2.2 中添加的,没有任何明确的语义或示例。
基于 Eclipse OCL Pivot 的实现原型解决了模糊性。 OclElement::allInstances() 在 /org.eclipse.ocl.pivot/model/OCL-2.5.oclstdlib 中建模为静态操作,因此源必须是类型。
如果您调用 self.allInstances(),您会得到“'Class' 而不是 'Object' 所需的值”。
如果你调用 self.oclType().allInstances() 你会得到更有趣的东西。
注意。实现 oclType() 以支持全反射是另一个规范说明。
如果你想要 OCL 实现之间的可移植性,坚持使用 Person.allInstances()->isUnique(employeeNumber).