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

редактировать

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

Содержание

  • 1 Описание
  • 2 Отношение
    • 2.1 OCL и UML
    • 2.2 OCL и MOF
    • 2.3 OCL и QVT
  • 3 Альтернативы
  • 4 См. Также
  • 5 Ссылки
  • 6 Внешние ссылки

Описание

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

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

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

Отношение

OCL и UML

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

OCL и MOF

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

OCL и QVT

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

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

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

Примеры
ОграничениеЭквивалент OCL
Возраст человека не является отрицательным.context Person inv : self.age>= 0
Человек моложе своих родителей.context Человек inv : self.parents->forAll (p | p.age>self.age)
После дня рождения человек становится на год старше.context Person :: hasBirthday () post : [email#160;protected]+1
У человека не более 2 родителей.context Person inv : self.parents->size () <=2
После того, как у кого-то есть ребенок, его дочерний набор не пуст, и он больше, чем раньше.context Person :: getsChild () post : self.childs->notEmpty () и self.childs->size ()>[email#160;protected]>size ()
Владельцем машины может быть только взрослый.context Person inv : self.age <18 подразумевает self.cars->isEmpty ()
Первая регистрация автомобиля не может быть до того, как он будет построен.context Auto inv : self.registration>= self.constructionYear
У каждого человека, у которого есть машина, есть хотя бы одна машина моложе этого человека.context Person inv : self.cars->notEmpty () подразумевает, что self.cars->существует (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)

.

См. также

Ссылки

Внешние ссылки

Эта статья основана на материалах, взятых из Free On-line Dictionary of Computing до 1 ноября 2008 г. и включенных в соответствии с условиями «перелицензирования» GFDL, версия 1.3 или новее.

Последняя правка сделана 2021-06-01 07:22:20
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте