530 Глава 25. Введение в OCL
• OCL обеспечивает возможность создавать более точные модели – это
уменьшает вероятность неверного толкования модели.
• OCL является частью сертификационного экзамена OCUP (OMG
Certified UML Professional – сертифицированный OMG специалист
UML) – в тест включено очень мало вопросов по OCL, но они там
есть.
Есть несколько причин, по которым OCL может показаться бесполез+
ным.
• OCL довольно сложен для восприятия – он имеет нестандартный
синтаксис и множество необычных «сокращенных» форм.
• В настоящее время с OCL знакомы очень немногие разработчики
моделей и еще меньшее число программистов – таким образом, мо
жет оказаться, что OCLвыражения не «найдут своего зрителя».
• Такой уровень точности, который предлагает OCL, может оказаться
ненужным – например, если создается неформальная UMLмодель,
которая будет передана для уточнения программистам, OCL может
быть излишним.
Мы считаем, что OCL – это просто еще один инструмент в инструмен
тарии средств моделирования, который может использоваться при
создании строгих UMLмоделей. Его полезно знать, чтобы уметь при
менять там, где он действительно нужен.
25.4. Синтаксис выражений OCL
OCL – небольшой язык, но он обладает на удивление сложным синтак
сисом, который до сих пор развивается. В частности, он имеет синтак
сические исключения и сокращения, которые иногда могут сбить с
толку несведущего пользователя. Синтаксис имеет много общего со
стилем С/С++/Java с некоторыми элементами Smalltalk.
Семантика языка OCL (формально определенная) не зависит от како
голибо конкретного синтаксиса. Со временем это может привести
к возникновению альтернативных синтаксисов OCL. Уже существует
SQLподобный синтаксис OCL для бизнесмоделирования, описание
которого можно найти в книге [Warmer 1].
В этой главе мы потратили много сил, пытаясь выделить наиболее не
понятные аспекты синтаксиса (и семантики) OCL и сделать их макси
мально прозрачными!
В отличие от большинства основных языков программирования, OCL
является декларативным языком. Это означает, что описывается ре
зультат, который необходимо получить, а не способ достижения этого
результата. Такие языки программирования, как Java, C#, C++
и большинство других, являются процедурными – в них шаг за шагом
описывается, как получается желаемый результат.