当时我学了点东方海外,遇到了下面的问题,我找不到正确的答案。我查看了关于OCL 2.4规格的文档,但没有发现,这似乎回答了我的问题:
大多数allInstances()示例如下所示:
上下文Person inv: Person.allInstances().forAll(p : Person \ p.employeeNumber <> self.employeeNumber)
其中Person是一个具有属性employeeNumber的类。
是否也允许在self和其他属性上使用allInstances(),并且具有相同的属性,如.allInstances()
发布于 2018-05-09 16:47:32
你正在达到OCL规范中较为模糊的区域之一。allInstances()是一种类型操作,因此可能被认为是静态的,但是静态关键字是在OCL2.2中添加的,没有任何明确的语义或示例。
基于Eclipse轴的实现原型对模糊的解决方案进行了分析.OclElement::allInstance()是作为/org.eclipse.ocl.pivot/model/OCL-2.5.oclstdlib中的静态操作建模的,因此源必须是类型。
如果调用self.allInstances(),就会得到“类”而不是“Object”所需的值。
如果调用self.oclType().allInstances(),则会得到更有趣的内容。
注意:实现oclType()以支持完全反射是另一个规范说明。
如果您希望OCL实现之间的可移植性,请坚持使用类似于Person.allInstances()->isUnique(employeeNumber).的方法。
https://stackoverflow.com/questions/50255008
复制相似问题