Язык ограничений объектов

Язык ограничений объектов ( OCL ) — это декларативный язык, описывающий правила, применимые к моделям Unified Modeling Language (UML), разработанный в IBM и теперь являющийся частью стандарта UML. Первоначально OCL был просто формальным расширением языка спецификации для UML. [1] OCL теперь можно использовать с любой Meta-Object Facility (MOF) Object Management Group (OMG) мета-моделью , включая UML. [2] Язык ограничений объектов — это точный текстовый язык, который предоставляет выражения ограничений и объектных запросов для любой модели MOF или метамодели, которые иначе невозможно выразить с помощью диаграммной нотации. OCL — это ключевой компонент новой стандартной рекомендации OMG по преобразованию моделей — спецификации запросов/представлений/преобразований ( QVT ).

Описание [ править ]

OCL — потомок Syntropy , метода объектно-ориентированного анализа и проектирования второго поколения. В определении OCL 1.4 указан язык ограничений. В OCL 2.0 определение было расширено и теперь включает общие определения языка объектных запросов.

Операторы OCL состоят из четырех частей:

  1. контекст, определяющий ограниченную ситуацию, в которой утверждение действительно
  2. свойство, которое представляет некоторые характеристики контекста (например, если контекст является классом, свойство может быть атрибутом)
  3. операция (например, арифметическая, ориентированная на множество), которая манипулирует или уточняет свойство, и
  4. ключевые слова (например, if, then, else и or not, подразумевает), которые используются для определения условных выражений.

Отношения [ править ]

OCL и UML [ править ]

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

OCL и MOF [ править ]

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

OCL и QVT [ править ]

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

Альтернативы [ править ]

Будучи языком проверки, основанным на правилах, Schematron можно рассматривать как альтернативу OCL. Однако Schematron работает с деревьями расширяемого языка разметки (XML), а OCL позволяет перемещаться по MOF моделям и метамоделям на основе (т. е. деревьям обмена метаданными XML ( XMI )). Другими словами, OCL относится к UML или MOF так же, как Schematron относится к XML . (Обратите внимание, что Schematron использует XPath для навигации внутри деревьев XML.)
Будучи языком спецификации модели, позволяющим дизайнерам украшать модель или метамодель аннотациями без побочных эффектов, OCL может быть заменен такими языками, как Alloy . Автоматическое создание OCL в принципе возможно на естественном языке. [3]

Примеры
Ограничение Эквивалент 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
У человека максимум 2 родителя. context Person inv: self.parents->size()<=2
После того, как у кого-то появится ребенок, его/ее дочерний набор не будет пустым и станет больше, чем раньше. context Person::getsChild() post: self.childs->notEmpty() and self.childs->size() > self.childs@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)


Расширения [ править ]

Затмение OCL [4] расширяет стандартный OCL дополнительными операторами и типом для карт. AgileUML расширяет стандартный OCL типами Map и Function. [5] Эти расширения соответствуют типам карт и функций, присутствующим в современных языках программирования, таких как Python и Swift.

См. также [ править ]

Ссылки [ править ]

  1. ^ Группа управления объектами (OMG); Спецификация языка объектных ограничений , глава 7 спецификации унифицированного языка моделирования OMG , версия 1.3, март 2000 г. (первое издание)
  2. ^ Группа управления объектами (OMG); Доступная спецификация языка объектных ограничений OMG, версия 2.0 , май 2006 г.
  3. ^ Имран Сарвар Баджва (октябрь 2010 г.). «Генерация ограничений OCL на основе спецификации естественного языка, 2010». ИИЭЭ . дои : 10.1109/EDOC.2010.33 . S2CID   7495256 . {{cite journal}}: Для цитирования журнала требуется |journal= ( помощь )
  4. ^ «Eclipse OCL™ (язык ограничения объектов)» . 31 января 2013 г.
  5. ^ Лано, Кевин; Колахдуз-Рахими, Шекуфе (2021 г.). «Расширение OCL с помощью типов карт и функций» . Основы программной инженерии . Конспекты лекций по информатике. Том. 12818. стр. 108–123. дои : 10.1007/978-3-030-89247-0_8 . ISBN  978-3-030-89246-3 . S2CID   239029860 .

Внешние ссылки [ править ]