您好我们目前正在使用MagicDraw 17.0。我们遇到了以下问题。我们想验证对象图中的对象是否有任何连接对象。
例如,如果对象“man”具有指向另一个对象“address”的链接。自动取款机。我们正在尝试这个
self.address->isEmpty()
其中address是adressobject在连接两个对象的关联中的角色,约束放在man上。不起作用。
答案 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页)