您好,我们目前正在使用 MagicDraw 17.0。我们遇到了以下问题。我们想验证对象图中的对象是否有任何连接的对象。
例如,如果一个对象“man”具有到另一个对象“address”的链接。自动取款机。我们正在尝试这个
self.address->isEmpty()
其中地址是地址对象在连接两个对象的关联中的角色,并且对人施加了约束。不工作。
您好,我们目前正在使用 MagicDraw 17.0。我们遇到了以下问题。我们想验证对象图中的对象是否有任何连接的对象。
例如,如果一个对象“man”具有到另一个对象“address”的链接。自动取款机。我们正在尝试这个
self.address->isEmpty()
其中地址是地址对象在连接两个对象的关联中的角色,并且对人施加了约束。不工作。
这不是您问题的直接答案,但希望能提供有关您所问问题的更多见解:
如果一个对象(比如 Man 的实例)没有链接(比如地址)到另一个对象(比如 Address 的实例),self.address
那么当 self 是一个 Man 时,对于 self 来说完全是未定义的!(请注意,地址是引用,地址是类型)。
看来oclIsUndefined()
操作可以用于此目的(正如格非所说),所以可能self.address -> oclIsUndefined()
对你有用!
OCL 规范的第 16 页说:
...如果表达式的值未定义,则有一个显式操作用于测试。oclIsUndefined() 是对 OclAny 的操作,如果其参数为 null 或无效,则结果为 True,否则为 False。
但还有另一个观点:
self.address
代表一个集合。所以isEmpty
如果它是空的,函数应该返回true!(这可能是您想使用的方式self.address->isEmpty
)
关于 isEmpty 函数的 OCL 规范第 175 页说:
isEmpty() : 布尔值
自我是空集合吗?
post: result = (self->size() = 0 )
注意:null->isEmpty() 凭借从 null 到 Bag{} 的隐式转换返回“true”
但正如你提到的 isEmpty 不适合你!
我要把这个留给 OCL 专家来评论差异吗?但可能第一种方法会有所帮助!
希望这可以帮助!
try oclIsUndefined()
(see OCL Specification 2.3.1 p.16)