您好,我们目前正在使用MagicDraw 17.0。我们遇到了以下问题。我们想要验证对象图中的对象是否有任何连接的对象。
例如,如果一个对象"man“具有到另一个对象"address”的链接。ATM机。我们正在尝试这个。
self.address->isEmpty() 其中,address是adressobject在连接两个对象的关联中的角色,约束放在man上。不起作用。
发布于 2014-09-02 00:47:33
这不是对你问题的直接回答,但希望能为你提出的问题提供更多的洞察力:
如果一个对象(比如一个人的实例)没有链接(比如Address)到另一个对象(比如Address的实例),那么在self是Man的情况下遍历self.address,对于self来说是完全没有定义的!(请注意,地址是一个引用,地址是一种类型)。
似乎oclIsUndefined()操作可以用于此目的(正如gefei提到的),所以self.address -> oclIsUndefined()可能会为您工作!
OCL规范的第16页写道:
...有一个显式操作用于测试表达式的值是否未定义。oclIsUndefined()是OclAny上的一个操作,如果其参数为空或无效,则返回True,否则返回False。
但还有另一种观点:
self.address表示一个集合。因此,如果isEmpty函数为空,则它应该返回true!(这可能是您使用self.address->isEmpty的方式)
关于isEmpty函数的OCL规范的第175页写道:
isEmpty():布尔值
self是空集合吗?
post: result = (self->size() =0)
注意: null->isEmpty()通过从null到Bag{}的隐式强制转换返回'true‘
但是正如你提到的,isEmpty并不适合你!
我把这个留给OCL专家来评论其中的区别?但第一种方法可能会有所帮助!
希望这能有所帮助!
发布于 2012-08-01 22:56:49
尝试oclIsUndefined() (参见OCL规范2.3.1第16页)
https://stackoverflow.com/questions/11523453
复制相似问题