Meta-Object Facility

Meta-Object Facility（MOF）とは、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以外の（CWMやSysML等）のモデルを定義する手段を手に入れることにもなった。最上位の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モデル自身で定義されており、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 を定義している:
ECoreという派生仕様が Eclipse Modeling Framework で定義されているが、これはほぼOMGのEMOFに相当する。
他の関連仕様としてOCLがある。これは述語論理を使用してモデルの制限や問合せを定義する形式言語の仕様である。
また、重要な新たな標準としてQVTがある。これはOCLの拡張であり、MOFベースのモデルの変換方法を記述する手段を提供するものである。（モデル変換言語参照）。
MOFは国際標準規格となっている: