1.2 Software Languages
What is the type of the languages that are we talking about? For instance, the acts of modeling software and programming are traditionally viewed to be different. Likewise, the characteristics of the languages used for either modeling or programming are perceived to be different, as shown in Table 1-1. However, the similarities between modeling and programming languages are larger than the differences. In essence, both describe software, and ultimately—after transformation and/or compilation—both need to be executable. Differences between modeling and programming that traditionally seemed very important are becoming less and less distinctive. Models are becoming precise and executable—see, for instance, Executable UML [Mellor and Balcer 2002]—and graphical; high-level syntaxes for programming languages are becoming popular—see, for example, the UML profile for Java [OMG-Java Profile 2004]. Furthermore, model-driven development has taught us that models must not be regarded as rather inconsequential artifacts of software development but instead as the core products.
Table 1-1. Perceived Differences between Modeling and Programming Languages
Modeling Language |
Programming Language |
Imprecise |
Precise |
Not executable |
Executable |
Overview |
Detailed view |
High level |
Low level |
Visual |
Textual |
Informal semantics |
Execution semantics |
By-product |
Core product |
In the remainder of this book, I use the term software language to indicate any language that is created to describe and create software systems. Note that many different languages target software development: programming and modeling languages, as well as query, data-definition, and process languages. In fact, all the languages mentioned in Section 1.1 are software languages.
But how should the product written in a software language be named? Should it be called model, program, query, or data definition or any other word that is currently in use for an artifact created with a software language? To avoid any form of bias, I introduce the term mogram (Figure 1-1), which can be a model or a program, a database schema or a query, an XML file, or any other thing written in a software language (see Section 3.1.1).
Figure 1-1 Mogram: a concept that includes programs, models, and other things