# Meta-Object Facility

Meta-Object Facility (MOF) es un estándar del Object Management Group (OMG) sobre ingeniería dirigida por modelos. Su propósito es proporcionar un sistema de tipos para entidades en la arquitectura CORBA y un conjunto de interfaces a través de las cuales esos objetos se pueden crear y manipular. La página de referencia oficial puede ser encontrada en el sitio web de OMG.

## Visión general

MOF se desarrolló para proporcionar un sistema de tipos para utilizarse en la arquitectura CORBA, un conjunto de esquemas mediante los cuales se podrían definir la estructura, significado y comportamiento de los objetos, y un conjunto de interfaces de CORBA que permiten que estos esquemas se puedan crear, almacenar y manipular.
MOF se diseñó como una arquitectura de cuatro capas. Proporciona un modelo meta-meta en la capa más alta, denominada capa M3. Este modelo M3 es el lenguaje utilizado por MOF para construir meta-modelos, denominados modelos M2. El ejemplo más ilustrativo de un modelo MOF de capa 2 es el meta-modelo UML, el modelo que describe el propio UML. Estos modelos M2 describen elementos de la capa M1 y, por lo tanto, modelos M1. Estos podrían ser, por ejemplo, modelos escritos en UML. La última capa es la capa M0 o capa de información. Se utiliza para describir objetos del mundo real.
Más allá del modelo M3, MOF describe la forma de crear y manipular modelos y meta-modelos mediante la definición de interfaces CORBA que describen esas operaciones. Debido a las similitudes entre el modelo MOF M3 y la estructura de modelos UML, los meta-modelos MOF se modelan normalmente como diagramas UML. Un estándar soportado de MOF es XML, el cual define un formato de intercambio basado en XML para modelos en las capas M3, M2 o M1.

## Arquitectura de meta-modelado

MOF es una arquitectura de meta-modelado cerrada; define un modelo M3, que se conforma a sí mismo. MOF permite una arquitectura de meta-modelado estricto; cada elemento del modelo en cada capa se corresponde estrictamente con un elemento el modelo de la capa superior. MOF sólo proporciona un medio para definir la estructura, o sintaxis abstracta de un lenguaje o de información. Para definir meta-modelos, MOF juega exactamente mismo papel que EBNF en la definición de la gramática de lenguajes de programación. MOF es un Lenguaje específico del dominio (DSL) utilizado para definir meta-modelos, al igual que EBNF es un DSL para la definición de la gramática. Y al igual que EBNF, MOF puede definirse en MOF.
En resumen, MOF utiliza la idea de MOF::Classes (no confundir con UML::Classes), conocida en la programación orientada a objetos, para definir conceptos (elementos del modelo) en una meta-capa. MOF puede utilizarse para definir meta-modelos orientados a objetos (como UML por ejemplo) así como meta-modelos no orientados a objetos (como Petri red o el meta-modelo de un Servicio web).
En de mayo de 2006, el OMG define dos puntos a cumplir por MOF:
* EMOF para MOF Esencial
* CMOF para MOF Completo
En junio de 2006, OMG emitió una petición para propuesta de una tercera variante, SMOF (MOF Semántico).
La variante ECore que ha sido definido en el Framework de modelado Eclipse es más o menos similar al EMOF de OMG.
Otro estándar relacionado es OCL, que describe un lenguaje formal que puede utilizarse para definir restricciones de modelo en términos de lógica de predicado.
QVT, el cual introduce el medio para consultar, ver y transformar los modelos basados en MOF, es un estándar importante aprobado en 2005.

## Estándar internacional

MOF es un estándar internacional:

### MOF 2.4.2

    ISO/IEC 19508:2014 Tecnología de información — Meta Object Facility (MOF)

### MOF 1.4.1

    ISO/IEC 19502:2005 Tecnología de información — Meta Object Facility (MOF)
MOF puede verse como un estándar para escribir meta-modelos, por ejemplo para modelar la sintaxis abstracta del Lenguaje específico del dominio. Kermeta es una extensión de MOF que permite realizar acciones que pueden adjuntarse a meta-modelos EMOF, haciendo posible modelar una DSL semántica operacional para obtener fácilmente un intérprete para él.
JMI Define una API Java para manipular modelos MOF.
El MOF de OMG no debe confundirse con Managed Object Format (MOF) definido por Distributed Management Task Force (DMTF) en la sección 6 de la Especificación de la infraestructura Common Information Model (CIM), versión 2.5.0.