Кто-нибудь знает учебник good Object Constraint Language (OCL)?

я наткнулся на пару вопросов о OCL выражений. Прочитав несколько университетских слайдов и погуглив его, я все еще не могу его правильно понять.

интересно, знает ли кто-нибудь из вас хорошие ресурсы, которые я должен прочитать, чтобы понять этот материал.


ограничения, которые меня беспокоят:

  1. все, кто работает в отделе, имеют одного и того же менеджера.
  2. никто в компании не является менеджером сам.
  3. никто в компании не зарабатывает больше, чем его менеджер.

для 1-го у меня есть:

контекст отдела

inv self.материал - > forAll (менеджер = self.персонал.менеджер)

2-я:

связи компании

inv self.employee - > select (manager = менеджер.менеджер) -> пустой()

3-я:

связи компании

inv self.сотрудник - > выбрать (зарплата > менеджер.зарплата) -> пустой()

но я не думаю, что это правильно. Я больше всего не уверен, действительно ли в Примере 2 и 3 я сравниваю отдельных сотрудников с их фактической зарплатой менеджера / менеджера.

4 ответов


быстрое решение по ограничениям:

контекстный отдел inv: личность.персонал - > forAll(s1, s2 / s1.менеджер = С2.менеджер)

контекст компании инв: личность.сотрудник - >forAll(e / e.менеджер e)

контекст компании инв: личность.сотрудник - >forAll(e / e.зарплата

кстати, я действительно не вижу необходимости в классе компании (сколько объектов типа company у вас есть в системе?). Если ограничения два и три справедливы для всех компании тогда они могли бы быть выражены, используя Person в качестве контекста таким образом (например, с номером 2): context Person inv: self.менеджеря)

мы также можем добавить проверки, чтобы увидеть, есть ли у сотрудника менеджер, прежде чем делать сравнение


наконец-то получил что-то хорошее!

Это очень информативный документ (PDF) из группы управления объектами (OMG):

Спецификация Языка Ограничения Объекта

Я люблю отвечать на мои собственные вопросы :)


для начинающих я бы рекомендовал эту книгу: Язык ограничений объектов: подготовка ваших моделей к MDA Джосом Уормером и Аннеке Клеппе (Джос был одним из главных создателей OCL).

также бесплатно OCL учебник (pdf + слайды)

Мне также очень нравится официальная спецификация, которую вы уже нашли (особенно глава, предлагающая неофициальное описание языка).


ссылка на PDF-файл, опубликованная @Artur, изменилась, вот новая ссылка http://www.omg.org/spec/OCL/2.0/PDF/