Object Constraint Language(OCL)は、統一
モデリング言語(UML)モデルに適用する規則を記述するための宣言型言語です。
IBMによって開発され、UML標準の一部として採用されました。初期のOCLは、UMLの形式仕様記述言語としての拡張に過ぎませんでしたが、その後、
Object Management Group(OMG)の
Meta-Object Facility(MOF)の
メタモデル全般を扱うように進化しました。
OCLは、MOFなどのモデルや
メタモデルについて、図表形式では表現が難しい制約やクエリを記述するための、正確なテキスト言語です。特に、
モデル駆動工学(MDE)や
モデル駆動型アーキテクチャ(MDA)において、モデル変換の記法は非常に重要であり、OCLはOMGのモデル変換に関する推奨標準である
QVT仕様の一部を構成しています。多くの
モデル変換言語(ATLなど)もOCLを基盤として構築されており、OCLのサポートは
QVT準拠の重要な条件となっています。
OCLの概要
OCLのルーツは、第二世代のオブジェクト指向分析・設計手法であるSyntropyにあります。OCL 1.4では制約言語の仕様が追加され、OCL 2.0では汎用的なオブジェクトクエリ言語の定義を含むように拡張されました。
OCL言語の構文は、以下の4つの要素で構成されます。
コンテキスト: 文が正しいとみなされる状況の制限を定義します。
プロパティ: コンテキストの特性を表現します(例:コンテキストがクラスの場合、プロパティはその属性となります)。
オペレーション: プロパティを操作・修正する演算(算術演算や集合演算など)を行います。
キーワード: 条件などを表現します(if、then、else、and、or、not、impliesなど)。
OCLとUML
OCLはUMLを補完する役割を果たし、自然言語の曖昧さを排除しながら、複雑な数学的記法を必要としないという特徴があります。また、図に基づいたモデルのためのナビゲーション言語としても機能します。
OCLとMOF
OCLは、MOFのメタ要素と表明を関連付けることで、MOFのモデルをより明確化します。これにより、モデルの意図がより正確に伝わるようになります。
モデル駆動工学(MDE)や
モデル駆動型アーキテクチャ(MDA)において、モデル変換は中心的な役割を果たします。OMGは、モデル変換の標準として
QVT(MOF/
QVT)を定義しました。GReAT、VIATRA、ATLなどの
モデル変換言語が存在しますが、これらの言語は
QVT標準への対応レベルが異なります。多くの場合、これらの言語はOCLに基づいて構築されており、OCLのサポートは
QVT準拠のための重要な条件となっています。
類似技術
ナビゲーション言語として見た場合、OCLはXPathと比較することができます。XPathがXMLツリーに対してナビゲーションを行うのに対し、OCLはMOFベースのモデルや
メタモデル(すなわちXMIツリー)に対してナビゲーションを行います。このように、OCLとUML/MOFの関係は、XPathとXMLの関係と類似しています。また、モデルや
メタモデルに副作用のない付加情報(制約など)を与えるモデル記述言語として見た場合、OCLと同様の役割を果たす言語としてAlloyなどが挙げられます。
OCLは、モデル駆動開発において不可欠な要素であり、モデルの正確性を確保し、より複雑なシステムを構築するための重要なツールです。