Meta-Object Facility (MOF) — стандарт OMG, служащий для описания метамоделей, которые лежат в основе различных средств объектного анализа и проектирования. Он определяет общие интерфейсы и семантику для взаимодействующих метамоделей,.разработан для поддержки MDD — технологий проектирования, управляемого моделями. Помимо определения общей семантики для метамоделей, MOF служит в качестве модели для UML. MOF — это абстракция UML, а UML — один из лучших примеров MOF. В стандарте MOF также предложены спецификации отображения модели MOF в язык определения интерфейсов IDL стандарта CORBA
Стандарт состоит из четырех слоев (уровней). Верхний уровень M3 есть язык построения метамоделей (метаметамодель). Уровень мета-метамодели образует исходную основу для всех метамодельных представлений. Главное предназначение этого уровня состоит в том, чтобы определить язык для спецификации метамодели. Мета-метамодель определяет модель языка на самом высоком уровне абстракции и является наиболее компактным ее описанием.
Уровень M2 есть собственно метамодель, которая является экземпляром или конкретизацией мета-метамодели. Например, это может быть метамодель для описания UML. Главная задача этого уровня — определить язык для спецификации моделей. Данный уровень является более конструктивным, чем предыдущий, поскольку обладает более развитой семантикой базовых понятий. Все основные понятия языка UML — это понятия уровня метамодели. Примеры таких понятий — класс, атрибут, операция, компонент, ассоциация и др. Другими словами, на этом уровне задаются правила построения диаграмм UML.
Уровень M1 относится к моделям — элементам метамоделей. Модель в контексте языка UML является экземпляром метамодели в том смысле, что любая конкретная модель системы должна использовать только понятия метамодели, конкретизировав их применительно к данной ситуации. Это уровень для описания информации о конкретной предметной области. Однако если для построения модели используются понятия языка UML, то необходима полная согласованность понятий уровня модели с базовыми понятиями языка UML уровня метамодели. Примерами понятий уровня модели могут служить, например, имена полей проектируемой базы данных, такие как имя и фамилия сотрудника, возраст, должность, адрес, телефон. При этом данные понятия используются лишь как имена соответствующих информационных атрибутов. Здесь конкретизируются имена классов, атрибутов, действий.
Уровень M0 относится к значениям атрибутов реальных моделей, на нем происходит конкретизация понятий модели на уровне объектов. Объект является экземпляром модели, поскольку содержит конкретную информацию относительно того, чему в действительности соответствуют те или иные понятия модели.