OCL中的正文表达

时间:2016-12-05 01:11:44

标签: ocl

我是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()

这是递归吗?

1 个答案:

答案 0 :(得分:0)

结果= 是无偿的绒毛将OCL查询转换为布尔值身体状况的狭窄UML要求。恕我直言,它应该删除,一些工具可能会为你做。

self.children 是直接的孩子

的x>联盟(y)的 结合两组

c.descendants() 是后代()

的递归调用

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

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

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

此致

Ed Willink