Constraints OCL2.0约束

Constraints OCL2.0约束,constraints,ocl,object-diagram,magic-draw,Constraints,Ocl,Object Diagram,Magic Draw,大家好,我们目前正在使用MagicDraw 17.0。我们遇到了以下问题。我们想验证对象图中的对象是否有任何连接的对象 例如,如果一个对象“man”与另一个对象“address”有链接。自动取款机。我们正在尝试这个 self.address->isEmpty() 其中,address是连接两个对象的关联中的ADRESObject的角色,约束施加在man上。不起作用。尝试oclIsUndefined()(请参阅OCL规范2.3.1 p.16)这不是对您问题的直接回答,但希望能提供有关您所

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

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

self.address->isEmpty() 

其中,address是连接两个对象的关联中的ADRESObject的角色,约束施加在man上。不起作用。

尝试
oclIsUndefined()
(请参阅OCL规范2.3.1 p.16)

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

如果一个对象(比如人的一个实例)与另一个对象(比如地址的一个实例)没有链接(比如地址),那么以人的身份遍历
self.address
,对于self来说是完全没有定义的!(请注意,地址是引用,地址是类型)

似乎
oclIsUndefined()
操作可以用于此目的(正如gefei所提到的),因此
self.address->oclIsUndefined()
可能适合您

OCL规范第16页规定:

。。。有一个显式操作用于测试 表达式未定义。oclIsUndefined()是对OclAny的操作 如果其参数为null或无效且为False,则结果为True 否则

但还有另一种观点:

self.address
表示一个集合。所以
isEmpty
函数如果为空,则应返回true!(这可能是您认为使用
self.address->isEmpty
的方式)

关于isEmpty功能的OCL规范第175页规定:

isEmpty():布尔值

self是空集合吗

  post: result = (self->size() = 0 ) 
注意:null->isEmpty()根据 从null到Bag{}的隐式转换

但正如你提到的,isEmpty不是为你工作的

我将此留给OCL专家来评论差异?但第一种方法可能会有所帮助


希望这有帮助

我试着按照你的建议去做,但在
self
OclAny
上调用它时,我总是会出现“
NXO不可执行
”错误。你能举个完整的例子吗?规范没有非常清楚地说明如何使用
oclIsUndefined()
。我得到“OclAny是AnyType的唯一实例”,并且您将传递属性(
self.address
)作为
oclIsUndefined()
的唯一参数。在哪个实体上调用该操作?