Язык объектных ограничений (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 состоят из четырех частей:
OCL дополняет UML, предоставляя выражения которые не имеют ни двусмысленности естественного языка, ни присущих трудностей использования сложной математики. OCL также является языком навигации для моделей на основе графов.
OCL делает модель Meta-Object Facility более точной, связывая утверждения с ее метаэлементами.
Особое значение для 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 или новее.