OCL allInstances () - PullRequest
       11

OCL allInstances ()

0 голосов
/ 09 мая 2018

В то время я немного изучаю OCL и сталкиваюсь со следующим вопросом, на который я не могу найти правильный ответ. Я посмотрел в документации по OCL 2.4 Spec , но не нашел ничего, что могло бы ответить на мой вопрос:

В основном allInstances () Примеры используются следующим образом:

context Person inv: Person.allInstances (). ForAll (p: Person | p.employeeNumber <> self.employeeNumber)

где Person - класс с атрибутом employeeNumber .

Разрешено ли также использовать allInstances () для себя и других атрибутов, и они будут иметь такие же значения, как .allInstances () ?

1 Ответ

0 голосов
/ 09 мая 2018

Вы попали в одну из областей специализации OCL. allInstances () является операцией типа и поэтому может рассматриваться как статическая, но ключевое слово static было добавлено в OCL 2.2 без четкой семантики или примеров.

Реализация на основе Eclipse OCL Pivot является прототипом решения проблем. OclElement :: allInstances () моделируется как статическая операция в /org.eclipse.ocl.pivot/model/OCL-2.5.oclstdlib, поэтому источник должен иметь тип.

Если вы вызываете self.allInstances (), вы получаете «Класс», а не «Требуемое значение« Объект »».

Если вы вызываете self.oclType (). AllInstances (), вы получаете что-то более интересное.

NB. реализация oclType () для поддержки полного отражения - еще одно уточнение спецификации.

Если вы хотите переносимости между реализациями OCL, придерживайтесь чего-то вроде Person.allInstances () -> isUnique (employeeNumber).

...