OpenU.Ru
Объектный язык ограничений (Object Constraint Language) - эта текстовый язык, который служит для определения ограничений и запросов. Он не предназначен для написания действий или выполнимого кода. Подробное изложение этого языка смотрите в книге Йоса Вармера.
Семантика
Объектный язык ограничений (OCL) представляет собой текстовый язык для создания навигационных выражений, логических и прочих запросов. Его можно использовать для описания ограничений, сторожевых условий, действий, пред- и постусловий, формальных утверждений и прочих выражений, принятых в языке UML. Полное описание синтаксиса языка OCL вы найдете в книге Йоса Вермера . Мы же приводим здесь наиболее популярные варианты синтаксиса этого языка, служащие для создания навигационных и логических выражений. В полном варианте языка содержится большое количество предопределенных операторов для коллекций и примитивных типов.
Нотация
Ниже мы приводим синтаксис некоторых общих навигационных выражений. Эти формы
можно соединять в цепочки. Элементы, стоящие слева, представляют собой выражения,
которые должны описывать объект или множество объектов. Предполагается, что
эти выражения будут работать для множества значений. Более подробное описание
самого языка ограничений и его синтаксиса смотрите в книге, на которую мы ссылались
выше.
элемент. селектор
селектор - это имя атрибута в элементе или имя роли целевого конца "связи,
который прикреплен к этому элементу. Результатом является значение атрибута
или объекта у противоположного конца сеяли. В зависимости от множественности
элемента и ассоциации результатом может быть одно значение пли множество значений.
элемент. селектор (аргументсписок)
селектор - это имя операции для данного элемента. Результатом является возвращаемое
значение операции, применяемой к элементу.
элемент. селектор [значение-квалифнкатора]
селектор обозначает квалифицированную ассоциацию, которая выбирает необходимый
элемент; значение квалификатора - это значение квалификатора атрибута. Результатом
является связанный объект, выбранный квалификатором. Обратите внимание, что
этот вид синтаксиса применяется при индексировании массивов и качестве формы
квалификации.
множество -> свойство-множества
свойство-множества - это имя встроенной OCL-функции для множества. Результатом
является свойство множества, свойство-множества может быть только предопределенной
OCL-функцией. Некоторые свойства перечислены ниже.
множество -> select (логическое-выражение)
логическое-выражение - записывается в терминах объектов, находящихся во множестве.
Результатом является подмножество объектов множества, для которых логическое
выражение будет истинным.
множество -> size
Количество элементов во множестве.
self
Указывает на текущий объект (если on очевиден по контексту, может опускаться).
знак операции
Обычные знаки арифметических или логических операций: = <><=>=<>
+ - * / not
Пример
flight.pilot.traning_hours >= flight.plane.minimurn_hours
Множество пилотов, которые имеют достаточное количество часов тренировочных
полетов.
company.employees->select (title = "Boss" and self.reports ->size
> 10)
Подмножество начальников, которые сделали более 10 отчетов.