2012-07-17 107 views
2

嗨,我们目前正在使用MagicDraw 17.0。我们遇到了以下问题。我们想验证对象图中的对象是否有任何连接的对象。OCL 2.0约束条件

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

self.address->isEmpty() 

其中address是adressobject在连接两个对象的关联中的角色,约束放在man上。不工作。

回答

0

尝试oclIsUndefined()(见OCL规范2.3.1第16页)

+0

我试着按照你的建议,但是当我在'self'或'OclAny'上调用它时,总会出现“'NXO不可执行的”错误。你能举一个完整的例子吗?这些规范并没有很清楚地说明“oclIsUndefined()”的用法。我知道“OclAny是AnyType的唯一实例”,并且您将传递属性('self.address')作为'oclIsUndefined()'的唯一参数。你在哪个实体上调用该操作? – observer 2013-01-29 13:28:49

1

这不是直接回答你的问题,但希望会提供关于你问的问题更深入的了解:

如果对象(比如Man的一个实例)没有与另一个对象(比如说Address的实例)的链接(比如说地址),遍历self.address并且自己是一个人,对于自我来说,根本就没有定义! (请注意,地址是参考,地址是类型)。

看起来oclIsUndefined()的操作可以用于这个目的(就像gefei提到的那样),所以大概self.address -> oclIsUndefined()会适合你!

第16页的OCL规范的说:

...有用于测试一个明确的操作如果 表达式的值是不确定的。 oclIsUndefined()是OclAny 上的一个操作,如果其参数为null或invalid,则返回True,否则返回False 。

但还有另一种观点:

self.address代表的集合。所以isEmpty函数应该返回true,如果它是空的! (这是你可能会想到来使用self.address->isEmpty的方式)关于IsEmpty函数的OCL规范的

第175页说:

的isEmpty():布尔

是自空集?

post: result = (self->size() = 0) 

注:空值>的isEmpty()返回“真”在凭借 的隐式转换,从零到袋{}

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

我要离开这到OCL专家评论区别?但可能第一种方法会有所帮助!

希望这会有所帮助!