2016-12-05 4 views
0

Я новичок в 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() 

Является ли это рекурсивный?

ответ

0

результат = является безвозмездным пухом для преобразования запроса OCL в узкие требования UML для булевозначного состояния тела. IMHO следует удалить, и некоторые инструменты могут сделать это для вас.

self.children является прямыми потомками

x-> объединение (у) объединяет два комплекта

c.descendants() рекурсия призывание потомков()

self.children -> collect (c | c.descendants()) - рекурсия, применяемая к каждому ребенку, и результат, полученный в сумме


Существует в настоящее время закрытия() итерации, так что я бы написать

контекстные Person :: потомков(): Set (Person) тело: детей-> замкнутости (дети)

С уважением

Ed Willink