Введение

Декларативный язык

Язык ограничений объектов (OCL) — это декларативный язык, описывающий правила, применимые к моделям Unified Modeling Language (UML), разработанным в IBM и являющийся сейчас частью стандарта UML. Изначально OCL был лишь формальным языком-расширением спецификации UML. В настоящее время OCL может использоваться с любой метамоделью группы управления объектами Meta Object Facility (MOF) (OMG), включая UML. Язык ограничений объектов — это точный текстовый язык, предоставляющий выражения ограничений и запросов к объектам для любой модели или метамодели MOF, которые нельзя выразить иным способом с помощью диаграммной нотации. OCL является ключевым компонентом новой рекомендации OMG по стандартизации преобразования моделей, спецификации Queries/Views/Transformations (QVT).

ОКЛ и UML

OCL дополняет UML, предоставляя выражения, лишенные неоднозначности, свойственной естественному языку, и сложности, присущей сложной математике. OCL также является языком навигации по графовым моделям.

ОКЛ и МОФ

OCL повышает точность модели Meta Object Facility, связывая утверждения с ее метаэлементами.

ОКЛ и QVT

Особое значение для разработки на основе моделей (MDE) или архитектуры, управляемой моделями, имеет понятие преобразования моделей. OMG определил специальный стандарт для преобразования моделей под названием MOF/QVT, или сокращенно QVT. В настоящее время существует несколько языков преобразования моделей, таких как GReAT, VIATRA или Tefkat, с различной степенью соответствия стандарту QVT. Многие из этих языков основаны на OCL, который является ключевым компонентом соответствия QVT.

Альтернативы

Будучи языком валидации, основанным на правилах, Schematron может рассматриваться как альтернатива OCL. Однако Schematron работает с деревьями Extensible Markup Language (XML), в то время как OCL позволяет осуществлять навигацию по моделям и метамоделям на основе MOF (т.е. деревьям XML Metadata Interchange (XMI)). Другими словами, OCL относится к UML или MOF аналогично тому, как Schematron относится к XML. (Обратите внимание, что Schematron использует XPath для навигации внутри XML-деревьев.) Язык спецификации моделей, позволяющий разработчикам дополнять модель или метамодель аннотациями без побочных эффектов, OCL может быть заменен такими языками, как Alloy. Автоматическая генерация OCL в принципе возможна на основе естественного языка. + ПримерыОграничениеЭквивалент OCLВозраст человека не может быть отрицательным. context Person inv: self.age >= 0Человек моложе своих родителей. context Person inv: self.parents->forAll(p | p.age > self.age)После дня рождения человек становится на год старше. context Person::hasBirthday post: self.age = self.age@pre + 1У человека не более двух родителей. context Person inv: self.parents->size <= 2После того, как у кого-то родился ребенок, его набор детей не пуст и больше, чем был ранее. context Person::getsChild post: self.children->notEmpty and self.children->size > self.children@pre->sizeТолько взрослый может быть владельцем автомобиля. context Person inv: self.age < 18 implies self.cars->isEmptyПервая регистрация автомобиля не может быть раньше его изготовления. context Auto inv: self.registration >= self.constructionYearКаждый человек, у которого есть автомобиль, имеет хотя бы один автомобиль, который моложе его. context Person inv: self.cars->notEmpty implies self.cars->exists(c | Calendar.YEAR - c.constructionYear < self.age)Никто не может быть своим собственным родителем. context Person inv: self.parents->excludes(self)Существует хотя бы один человек, владеющий автомобилем. context Person inv: Person.allInstances->exists(p | p.cars->size > 0)

Расширения

Eclipse OCL расширяет стандартный OCL дополнительными операторами и типом для отображений (Maps). AgileUML расширяет стандартный OCL типами отображений (Map) и функций (Function). Эти расширения согласованы с типами отображений и функций, присутствующими в современных языках программирования, таких как Python и Swift.