Object Constraint Language

Object Constraint Language（OCL）は、統一モデリング言語 (UML) モデルに適用する規則を記述するための宣言型言語である。IBMが開発し、UML標準の一部となった。初期のOCLは、単なるUMLの形式仕様記述言語としての拡張であったが、その後 UMLだけでなく Object Management Group (OMG) の Meta-Object Facility (MOF) のメタモデル全般を扱うようになった。Object Constraint Language (OCL) は Meta-Object Facility などのモデルやメタモデルについて、図表の形式では表現できない制約やクエリを表現することができる正確なテキスト言語である。OCL は OMG のモデル変換に関する推奨標準 QVT 仕様の一部となっている。他の多くのモデル変換言語（ATLなど）も OCL に基づいて構築されている。

概要 
OCL の元となったのは、第二世代のオブジェクト指向分析・設計手法 Syntropy である。OCL 1.4 で制約言語の仕様が追加された。OCL 2.0 では、汎用のオブジェクト・クエリ言語の定義を含むよう拡張された。

OCL 言語の構文は以下の4つに分けられる:

 コンテキスト - 文が正しいといえる状況の制限を定義する
 プロパティ - コンテキストの特性を表現する（例えば、コンテキストがクラスである場合、プロパティはその属性となる）
 オペレーション - プロパティを操作・修正する演算（算術演算や集合的演算）
 キーワード - 条件などを表現する（if、then、else、and、or、not、implies など）

OCL と UML 
OCL はUMLを補うものであり、自然言語の曖昧さを排していると同時に複雑な数学的記法を扱わなくてもよいという特徴がある。OCL は、図に基づいたモデルのためのナビゲーション言語でもある。

OCL と MOF 
OCL は、MOFのメタ要素と表明を関連付けることで MOF のモデルをより明確化する。

OCL と QVT 
モデル駆動工学やモデル駆動型アーキテクチャ (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 などがある。

脚注

出典

参考文献 
 ヨシュ・ヴァルメル、アーネク・クレッペ、竹村司 (訳) 、『UML/MDAのためのオブジェクト制約言語OCL 第2版』、エスアイビー・アクセス、2004年、ISBN 978-4-434-05542-3

関連項目 
 Eclipse GMT Project
 MOF
 MOF Queries/Views/Transformations (QVT)
 XMI
 インテンショナルプログラミング (IP)
 オブジェクト指向分析設計 (OOAD) 
 コンピュータシミュレーション
 ドメイン固有言語 (DSL)
 ドメイン固有モデリング (DSM)
 メタモデル
 メタデータ
 モデルベーステスト (MBT) 
 モデル駆動型アーキテクチャ (MDA)
 モデル駆動工学 (MDE)
 モデル変換言語 (MTL)
 モデリング言語
 変換言語 (TL)
 XML変換言語 (XTL)

外部リンク 
 OMG OCL specification page
 OCL page of Computer Science Dept. of CSUSB （OCL 2.0 文法の概要）
 MIT paper "Some Shortcomings of OCL"
 OCL page of Klasse Objekten （Octopus OCL checker と Java code generator、OCL関連書籍紹介など）
 Dresden OCL Toolkit （OCLツールキット）
 HOL-OCL （OCL向けの対話型定理証明環境）
 OCL for Java tutorial on ParlezUML 
 Article on using EMF's OCL in Java code
 UML link page on cetus-links.org

統一モデリング言語
問い合わせ言語
形式仕様記述言語