In our context of interest, i.e., model driven development, such a characterization
would be too narrow. Other artifacts, such as Java programs, are considered
to be models as well.
The challenge is to apply the successful principle of unification
2 as long as it
provides benefits—e.g., to understand code generation from a UML model as a
“model to model” transformation—but stop before the term becomes meaningless.
After all, practically anything could be characterized as an “object” but
as a technical term it only provides value in communication if not everything
is included by “object”. Likewise one should attempt to define a boundary for
“model” that is large enough to draw on the powers of unification but small
enough to exclude interpretations that make it almost arbitrarily applicable.
The remainder of this article first attempts to home in on a characterization of
“model” in the context of model driven development that everyone may subscribe
to. Next we will distinguish two fundamentally different kinds of models. Only
after the differences between these two kinds have been made explicit, will we be
able to further define basic model properties and notions such as “metamodel”.