Meta-Object Facility

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内, 検索

Meta-Object FacilityMOF)とは、OMGの定めたモデル駆動工学のための標準規格である。公式ページはOMG's MetaObject Facility

目次

[編集] 概要

MOF は統一モデリング言語 (UML) を起源としている。OMG が UML の標準化を行った際に、モデルの厳密な定義を行う手段として、MOF を導入したのである。MOF は4階層のアーキテクチャとして設計されている。理解を容易にするために、M1 層より説明しよう。M1 層で定義されるモデルは、通常の UML モデルなど、普通にソフトウェアの設計等で用いられるモデルである。UML のクラスなどがここに含まれる。その下位に当たる M0 層は、M1 層のインスタンスである。M1 層の UML クラスから実行時に生成される個々のインスタンス等がこれに該当する。上位の M2 層は、「UML 自身の構造の定義」が含まれる(この M2 層を指してメタモデルと呼ぶことが多い)。例えば、UMLのクラスには複数のフィールドやメソッドがあり、クラス間には様々な種類のリレーション(アソシエーションやアグリゲーション等)が存在している。これらは「UML 自身の構造」の一部である。M2 層を用いることで、このような UML モデルの構造の厳密な定義を行うことが可能になる。さらに、MOF の導入により、OMG は UML 以外の(CWMSysML 等)のモデルを定義する手段を手に入れることにもなった。最上位の M3 層は、メタ-メタモデルと呼ばれ、(UML ではなく)MOF 自身の構造を定義する。

MOF と UML は良く似ているため、MOF メタモデルは通常 UML のクラス図としてモデル化される。MOF をサポートする標準として XMI がある。XMI を用いて、M3/M2/M1層のモデルを XMLベースの形式で交換することが可能となる。さらにMOFでは、モデルやメタモデルを生成・操作する手段として Java 言語インタフェースJMI を定義している(MOF1.4 までは、CORBA IDL インターフェイスも定義されていたが、MOF2.0 からは削除された)。

MOF は「閉じた」メタモデリング・アーキテクチャである。なぜならば、M3 モデルは M3 モデル自身で定義されており、MOF M3 層を定義するために外部の定義を必要としないからである。また、MOF は「厳密な」メタモデリング・アーキテクチャでもある。各層の各モデル要素は上位層のモデル定義に厳密に対応している。MOF は、言語やデータの構造の抽象構文を定義する手段を提供する。メタモデル定義において MOF が果たす役割は、プログラミング言語の構文定義においてEBNFが果たす役割と全く同じである。MOF はメタモデル定義のためのドメイン固有言語 (DSL) と捉えることができ、これはちょうど EBNF が構文定義のための DSL であるのと同じである。EBNF と同様、MOF は MOF 自身で定義できる(これがM3層の定義となる)。

MOF はオブジェクト指向でなじみのあるクラスを用いて構造を定義する(ただし、ここで用いるクラス MOF::Classes であり、UML で用いるUML::Classes とは厳密には異なる)。これによりメタレベルにおける概念(モデル要素)とその構造を定義する。しかし、MOF で定義されるモデルがUMLのようなオブジェクト指向型のメタモデルに限定されるわけではない。オブジェクト指向型でないメタモデルも定義可能である(例えば、関係モデルペトリネットWebサービスのメタモデルなど)。

2008年2月現在、OMG は2種類の MOF を定義している:

  • EMOF: Essential MOF(基本MOF)
  • CMOF: Complete MOF(完全MOF)

ECoreという派生仕様が Eclipse Modeling Framework で定義されているが、これはほぼ OMG の EMOF に相当する。

他の関連仕様としてOCLがある。これは述語論理を使用してモデルの制限や問合せを定義する形式言語の仕様である。

また、重要な新たな標準としてQVTがある。これは OCL の拡張であり、MOF ベースのモデルの変換方法を記述する手段を提供するものである。(モデル変換言語参照)。

MOF は国際標準規格となっている:

ISO/IEC 19502:2005 Information technology -- Meta Object Facility (MOF)


[編集] 関連項目

[編集] 外部リンク

[編集] 参考文献

個人用ツール
名前空間
変種
操作
案内
ヘルプ
ツールボックス
他の言語