0

我是 OCL 的新手,我刚刚遇到了这个表达式:

context Person::descendants(): Set  
 body: result = self.children -> union(
 self.children -> collect(c | c.descendants()))

我现在想获取一个人的直系和直系后代,但是这里怎么写,每个句子都想说什么?

还有这个,

context Person::income(): Integer  
body: self.job.salary -> sum()

这是递归的吗?

4

1 回答 1

0

结果 = 将 OCL 查询转换为布尔值主体条件的狭义 UML 要求是毫无意义的。恕我直言,它应该被删除,一些工具可能会为你这样做。

self.children 是直接孩子

x->union(y) 组合两个集合

c.descendants() 是对 descendants() 的递归调用

self.children -> collect(c | c.descendants()) 是应用于每个孩子的递归,结果累积为一个 Bag


现在有一个closure() 迭代所以我会写

context Person::descendants(): Set(Person) body: children->closure(children)

问候

埃德·威林克

于 2017-02-27T16:07:30.653 回答