Previous | Table of Contents | Next |
The meta-metamodeling layer forms the foundation of the metamodeling hierarchy. The primary responsibility of this layer is
to define the language for specifying a metamodel. The layer is often referred to as M3, and MOF is an example of a meta-metamodel.
A meta-metamodel is typically more compact than a metamodel that it describes, and often defines several metamodels. It is
generally desirable that related metamodels and meta-metamodels share common design philosophies and constructs. However,
each layer can be viewed independently of other layers, and needs to maintain its own design integrity.
A metamodel is an instance of a meta-metamodel, meaning that every element of the metamodel is an instance of an element in
the meta-metamodel. The primary responsibility of the metamodel layer is to define a language for specifying models. The layer
is often referred to as M2; UML and the OMG Common Warehouse Metamodel (CWM) are examples of metamodels. Metamodels are typically
more elaborate than the meta-metamodels that describe them, especially when they define dynamic semantics. The UML metamodel
is an instance of the MOF (in effect, each UML metaclass is an instance of an element in InfrastructureLibrary).
A model is an instance of a metamodel. The primary responsibility of the model layer is to define languages that describe
semantic domains, i.e., to allow users to model a wide variety of different problem domains, such as software, business processes,
and requirements. The things that are being modeled reside outside the metamodel hierarchy. This layer is often referred to
as M1. A user model is an instance of the UML metamodel. Note that the user model contains both model elements and snapshots
(illustrations) of instances of these model elements.
The metamodel hierarchy bottoms out at M0, which contains the run-time instances of model elements defined in a model. The
snapshots that are modeled at M1 are constrained versions of the M0 run-time instances.
When dealing with more than three meta-layers, it is usually the case that the ones above M2 gradually get smaller and more
compact the higher up they are in the hierarchy. In the case of MOF, which is at M3, it consequently only shares some of the
metaclasses that are defined in UML. A specific characteristic about metamodeling is the ability to define languages as being
reflective, i.e., languages that can be used to define themselves. The InfrastructureLibrary is an example of this, since
it contains all the metaclasses required to define itself. When a language is reflective, there is no need to define another
language to specify its semantics. MOF is reflective since it is based on the InfrastructureLibrary, and there is thus no
need to have additional meta-layers above MOF.