2

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

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

self.address->isEmpty() 

其中地址是地址对象在连接两个对象的关联中的角色,并且对人施加了约束。不工作。

4

2 回答 2

1

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

如果一个对象(比如 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 专家来评论差异吗?但可能第一种方法会有所帮助!

希望这可以帮助!

于 2014-09-01T16:47:33.277 回答
0

try oclIsUndefined() (see OCL Specification 2.3.1 p.16)

于 2012-08-01T14:56:48.837 回答