OCL 2.0约束

时间:2012-07-17 13:22:53

标签: constraints ocl object-diagram magic-draw

您好我们目前正在使用MagicDraw 17.0。我们遇到了以下问题。我们想验证对象图中的对象是否有任何连接对象。

例如,如果对象“man”具有指向另一个对象“address”的链接。自动取款机。我们正在尝试这个

self.address->isEmpty() 

其中address是adressobject在连接两个对象的关联中的角色,约束放在man上。不起作用。

2 个答案:

答案 0 :(得分:1)

这不是您问题的直接答案,但希望能够提供有关您提出的问题的更多见解:

如果一个对象(比如Man的一个实例)没有链接(比如说地址)到另一个对象(比如地址的实例),遍历self.address并且自己是一个人,对于自己来说根本就没有定义! (注意,地址是参考,地址是类型)。

似乎oclIsUndefined()操作可以用于此目的(如gefei所提到的),所以self.address -> oclIsUndefined()可能适合你!

OCL规范的第16页说:

  

...有一个明确的操作,用于测试a的值   表达式未定义。 oclIsUndefined()是对OclAny的一个操作   如果其参数为null或无效且为False,则返回True   否则。

但还有另一个观点:

self.address代表一个集合。所以isEmpty函数如果为空则应该返回true! (这是您可能认为使用self.address->isEmpty

的方式

关于isEmpty函数的OCL规范的第175页说:

  

isEmpty():Boolean

     

自我是空集吗?

  post: result = (self->size() = 0 ) 
     

注意:null-> isEmpty()返回'true'   隐式转换从null到Bag {}

但正如你提到的那样,空虚并不适合你!

我将这个留给OCL专家来评论这个区别?但可能第一种方法会有所帮助!

希望这有帮助!

答案 1 :(得分:0)

尝试oclIsUndefined()(参见OCL规范2.3.1第16页)