Формальный язык спецификации, используемый с метамоделями MOF (включая UML) для выражения запросов или ограничений, которые иначе не могут быть выражены в схематической нотации.

Язык объектных ограничений ( OCL) может использоваться для определения инвариантов, запросов, предварительных и постусловий для метамоделей MOF (включая модели UML). Это позволяет пользователю указывать ограничения для моделей, которые не могут быть указаны в графической нотации UML.

Сам OCL - это типизированный язык без побочных эффектов, основанный на логике первого порядка.

Инварианты определяются для контекста, обычно для класса. Следующий инвариант утверждает, что все имена людей должны быть уникальными:

context Person inv namesUnique:
  Person.allInstances->forAll(p|self.name=p2.name implies self=p2)

Обратите внимание, что OCL предоставляет встроенную функцию allInstances() для доступа ко всем экземплярам класса.

Пред- и постусловия указываются в контексте операции. В почтовом состоянии специальный оператор@preможет использоваться для доступа к значениям переменных, атрибутов и т. д. до вызова операции. Также специальная переменнаяresult может использоваться для доступа к результату вызова операции.

Следующие условия могут быть указаны для операции pop():OclAny стека:

pop():OclAny
  pre  self.size > 0
  post self.size = self.size@pre - 1
  post result = self.elements@pre->last()

Помимо определения ограничений, OCL используется в качестве языка запросов в подходах к преобразованию моделей, таких как QVT.

Дополнительную информацию о OCL можно найти на веб-сайтах семинара OCL или на портале OCL.