Язык объектных ограничений - Object Constraint Language
Язык объектных ограничений ( OCL ) - это декларативный язык, описывающий правила, применяемые к моделям Unified Modeling Language (UML), разработанные в IBM, и теперь он является частью стандарта UML. Изначально OCL был просто расширением формального языка спецификаций для UML. OCL теперь можно использовать с любой мета-моделью Meta-Object Facility (MOF) Object Management Group (OMG) , включая UML. Язык объектных ограничений - это точный текстовый язык, который предоставляет выражения ограничений и объектных запросов для любой модели MOF или метамодели, которые иначе не могут быть выражены в схематической нотации. OCL является ключевым компонентом новой стандартной рекомендации OMG по преобразованию моделей, спецификации запросов / представлений / преобразований ( QVT ).
Описание
OCL является потомком Syntropy , объектно-ориентированного метода анализа и проектирования второго поколения. В определении OCL 1.4 указан язык ограничений. В OCL 2.0 определение было расширено за счет включения общих определений языка объектных запросов.
Операторы OCL состоят из четырех частей:
- контекст, который определяет ограниченную ситуацию, в которой утверждение действительно
- свойство, которое представляет некоторые характеристики контекста (например, если контекст является классом, свойство может быть атрибутом)
- операция (например, арифметическая, ориентированная на набор), которая манипулирует или квалифицирует свойство, и
- ключевые слова (например, if, then, else и, or, not, подразумевает), которые используются для определения условных выражений.
Связь
OCL и UML
OCL дополняет UML , предоставляя выражения, в которых нет ни двусмысленности естественного языка, ни трудностей, присущих использованию сложной математики. OCL также является языком навигации для моделей на основе графов.
OCL и MOF
OCL делает модель Meta-Object Facility более точной, связывая утверждения с ее метаэлементами.
OCL и QVT
Особое значение для проектирования, управляемого моделями (MDE) или управляемой моделями архитектуры, имеет понятие преобразования модели . OMG определил стандарт специфический для модели трансформации под названием МФ / 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 в принципе возможна из естественного языка.
Ограничение | Эквивалент 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)
|
Смотрите также
- Компьютерная модель
- Отображение данных
- Специфический для домена язык (DSL)
- Доменно-ориентированное моделирование (DSM)
- Проект Eclipse GMT
- Язык выражений Gello
- Глоссарий терминов единого языка моделирования
- Преднамеренное программирование (IP)
- Список инструментов UML
- Мета-моделирование
- Техника мета-моделирования
- Мета-объектный объект (MOF)
- Метаданные
- Модельно-ориентированное тестирование (MBT)
- Модельно-управляемая архитектура (MDA)
- Модельно-ориентированная инженерия (MDE)
- Язык преобразования модели (MTL)
- Язык моделирования
- Перспективы моделирования
- MOFM2T
- Объектно-ориентированный анализ и дизайн (OOAD)
- Запросы / представления / преобразования MOF (QVT)
- Семантический перевод
- Язык трансформации (TL)
- Инструмент UML
- Преобразование на основе словарного запаса
- XMI
- Язык преобразования XML (XTL)
Ссылки
внешние ссылки
- Спецификация OMG OCL
- Портал OCL - центр информации, связанной с OCL
- Страница OCL Департамента компьютерных наук CSUSB (краткий синтаксис OCL 2.0)
- Octopus: инструмент OCL для точных спецификаций Uml (проверка OCL)
- Dresden OCL Toolkit (OCL Toolkit, различные публикации, связанные с OCL)
- HOL-OCL (интерактивная среда доказательства теорем для OCL, различные публикации, связанные с OCL)
- Учебник OCL для Java на ParlezUML
- Статья об использовании EMF OCL в Java-коде
- Страница ссылок UML на cetus-links.org
- USE (UML-based Specification Environment) (Инструмент OCL для проверки модели, различные публикации, связанные с OCL)
- OCL учебник
- NL2OCL (инструмент OCL для генерации инвариантов из NL)
Эта статья основана на материалах, взятых из Free On-line Dictionary of Computing до 1 ноября 2008 г. и включенных в соответствии с условиями «перелицензирования» GFDL версии 1.3 или новее.