Кто-нибудь знает учебник good Object Constraint Language (OCL)?
я наткнулся на пару вопросов о OCL выражений. Прочитав несколько университетских слайдов и погуглив его, я все еще не могу его правильно понять.
интересно, знает ли кто-нибудь из вас хорошие ресурсы, которые я должен прочитать, чтобы понять этот материал.
ограничения, которые меня беспокоят:
- все, кто работает в отделе, имеют одного и того же менеджера.
- никто в компании не является менеджером сам.
- никто в компании не зарабатывает больше, чем его менеджер.
для 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/