大家好,我们目前正在使用MagicDraw 17.0。我们遇到了以下问题。我们想验证对象图中的对象是否有任何连接的对象。
例如,如果一个对象"man"有一个到另一对象"address"的链接。Atm。我们正在试用这个
self.address->isEmpty()
其中address是地址对象在连接两个对象的关联中的角色,并且对man施加约束。不起作用。
这不是对您问题的直接回答,但希望能提供更多关于您所问问题的见解:
如果一个对象(比如Man的实例)没有到另一个对象的链接(比如address的实例),那么在自身是Man的情况下遍历self.address
,对于自身来说将是完全未定义的!(请注意,address是一个引用,address是一个类型)。
似乎oclIsUndefined()
操作可以用于此目的(正如格非所提到的),所以self.address -> oclIsUndefined()
可能对您有效!
OCL规范第16页写道:
如果表达式未定义。oclIsUndefined()是对OclAny的操作如果其参数为null或无效,则结果为True,并且为False否则
但还有另一个视角:
self.address
表示集合。因此,如果isEmpty
函数为空,它应该返回true!(这可能是你认为使用self.address->isEmpty
的方式)
关于isEmpty函数的OCL规范第175页说:
isEmpty():布尔
self是空的集合吗?
post: result = (self->size() = 0 )
注意:null->isEmpty()根据从null到Bag{}的隐式强制转换
但正如你所提到的,空对你不起作用!
我把这个留给OCL专家来评论区别?但第一种方法可能会有所帮助!
希望这能有所帮助!
尝试oclIsUndefined()
(参见OCL规范2.3.1第16页)