Models consist of sets of elements that describe some physical, abstract, or hypothetical reality. Good models serve as means of communication; they're cheaper to build than the real thing; and they suit the plan of attack that the team takes toward solving the problem at hand. Models can run the gamut from rough sketches to fairly detailed blueprints to fully executable models; all are useful in the appropriate context.
One key to effective modeling in the context of systems development is good usage of abstraction and classification. Abstraction involves ignoring information that is not of interest in a particular context; classification involves grouping important information based on common properties, even though the things under study are of course different from one another.
Central to MDA is the notion of creating different models at different levels of abstraction and then linking them together to form an implementation. Some of these models will exist independent of software platforms, while others will be specific to particular platforms. Each model will be expressed using a combination of text and multiple complementary and interrelated diagrams.
The modeling language family of choice today is the UML. The existence of this standard, (reasonably) well-defined language reduces the likelihood of misinterpretation by the viewers of models. In the longer term, defining domain-specific languages (DSLs) using the MDA framework is likely to be an important alternative to the UML.
We look at models in more detail in Chapter 3.