The most straightforward approach to executable UML models is to create a direct link (or dependency) between the meta-model and a specific language. In the meta-model, users are allowed to write statements and expressions in the language (called an ``action language''). The libraries of the language are also available for immediate use in the model. When the design of the model is finished, it can be converted into source code (again, in the same language), and can be executed after compilation (Figure 2).
The language chosen is arbitrary. It can be any of the contemporary programming languages such as C++, Java, Python [Fen02] and so on.
This gives model designers much power to express software systems. In a sense, to design a model is much like programming, because they have to write real code in appropriate places of the model 4. The code has unlimited power to access and modify any object or variable in the run-time system.
Because almost all the modelling environments implemented in this scheme naively place the language-specific expressions and statements unchanged in the source code generated from the model 5, the disadvantages are very obvious: