As software systems and hardware systems are becoming more and more complex nowadays, a systematic approach for the development of physical as well as software systems is needed.
As we look back at the history of software development, there have been three revolutions which greatly improved productivity and quality. The first revolution was the Fortran language. Two important concepts were introduced in Fortran: structured programming and variable names. With those concepts, programmers no longer mixed data and code in a program. They started to think in a more modular way instead of directly writing assembly code or machine code, which is hard to understand or debug for human beings. As a result, both productivity and quality of the systems were improved.
The second revolution started in the 60's with Algol and reached its peak somewhere in the 80's when the dominating languages were Pascal and C. Those languages eliminated all column-based formatting. They provided well-designed high-level control structures such as ``while'' loops and ``for'' loops. This programming was much more structured, and the use of the ``goto'' statement was widely criticized for breaking the structure (or the modularity) of the programs.
The third revolution was object-oriented programming (OOP). The OOP concept originated in the Simula language emerging in 1967. C++ matured this idea and made it practical. Programmers started to think in a more modular way and to reuse existing code to a greater extent by means of encapsulation and polymorphism. Encapsulation emphasizes the distinction between behavior and interface. Data is divided and maintained in different classes according to their semantics. These ideas help guarantee the integrity of a logical piece of software, and make it more stable. Polymorphism allows better reusability. The behavior of a whole class or part of it can be reused by means of inheritance. Overriding allows to modify part of the existing behavior of a class and fit it to a new application. These ideas greatly improve productivity.
However, as new demands arise, people have seen the limitations of OOP, or software programming in general:
Neither structured programming nor object-oriented programming solves the above problems, due to the fact that such problems have their roots in the high-level design instead of in the implementation. Effort has been spent on discovering systematic methods for system design. This effort leads to the research in modeling and simulation based design.
This chapter presents a general introduction to modeling and simulation. In particular, existing formalisms for this purpose, such as statecharts and DEVS (Discrete EVent Systems specification), are discussed. They are the starting point of this thesis work.