**1. Model classification**

A metamodel characterizes the set of all terminal models conforming to it. Comparing the metamodels will thus provide a classification of different kinds of models. Of course, according to the criteria of comparison, we’ll get different complementary classification schemes.

**2. Product and Process**

One well-known distinction on metamodels is between products (structured set of artifacts produced or consumed) and processes describing who is doing what, when, why and how (the way this is done, the characterization of tasks, actors, roles, goals, etc.).

**3. Static and Dynamic**

Less classical is the distinction between dynamic and static models. A static model is invariant while a dynamic model changes over time. This should not be confused with the static and dynamic aspects of systems. The most common situation is a static model of a dynamic system.

One advantage of a static model is that we can easily reason on it, i.e; we can establish facts and proofs. This is much more difficult if the model is itself evolving in time. When the system is dynamic and the model is itself dynamic, we have a typical situation called simulation, which is another branch of software modeling.

**4. Executable models**

The fact that a model is executable or non-executable has nothing to do with the previous property. A Java program may be naturally considered as an executable model. Unless extended, a UML model is non-executable. The way to give some specific executability semantic to a UML model is by using the “Action Semantics” meta-model.

**5. Atomic or Composite **

Like any software component, a model may be atomic or composite. An atomic model contains only basic elements. A composite model contains at least another model. The possibility of composition is defined at the metamodel level. The containment hierarchy for models is distinct from the specialization hierarchy.

**6. Primitive or Derived**

A model may be primitive or derived. A derived model may be obtained from other models (primitive or derived) by a derivation operation or a sequence of such operations. A derivation operation is a simple and deterministic model transformation.

**7. Transient models**

An essential model is a model that is intended to stay permanently in the model repository system. A transient model is disposable, i.e. it has been used for some temporary purpose and has not to be saved. Compilers use for example some intermediate files to carry on their transformation from high-level languages to low level machine language.

**8. Correspondance models**

** **

One important kind of model that is being considered now is the correspondence model. A correspondence model explicitly defines various correspondences that may hold between several models. In the usual case, there are only two models: the source and the target. There may be several correspondences between a couple of elements from source and target. The correspondences are not always between couples of elements and they are strongly typed. There is not yet a global consistent view on correspondence models since this problem is appearing from different perspectives. There are different kinds of correspondance models. One of them is the traceability model.

**9. Transformation models**

One may consider a transformation model as some kind of correspondance model.

**10. Code and Data models**

A model may be a representation of code or a representation of any data.

**11. Terminal models vs. Metamodels**

The distinction is important. One may consider the operations of

*promotion*and*demotion*.**12. Conclusion**

MDE is working in two directions. First integration of all types of software artifacts as models, in a uniform representation scheme. Then, when this is achieved, classification of all the kinds of models (i.e. of metamodels) in order to define precisely which kind of operation may be applied on which model.