The expressive power of DCharts is formally shown in this chapter. It is proved that non-recursive DCharts are at most as powerful as statecharts with variables (section 5.1), and non-recursive (the theorem in section 5.3 does not use recursive importation) DCharts are at least as powerful as statecharts with variables. From these results, it can be inferred that non-recursive DCharts are equivalent to statecharts with variables in terms of expressiveness. Similarly, sections 5.2 and section 5.4 prove that non-recursive DCharts are equivalent to DEVS in terms of expressiveness.
Obviously, DCharts are more powerful than statecharts with variables
and DEVS. Recursive importation and the parametrized importation
introduced by SVM cannot be modeled with non-recursive DCharts.
5.1 Because of the
equivalence of expressiveness, recursive importation and parametrized
importation cannot be modeled with statecharts with variables or DEVS,
either. The following inequation shows the comparison of
expressiveness of the above-mentioned formalisms:
The expressiveness of DCharts is further shown by using them to model the constructs in the C programming language. This proves that DCharts are able to model a complete system in place of modern programming languages such as C. The explicitly modeled parts of a system can be formally checked, analyzed, optimized and simulated with DCharts modeling and simulation tools. Code can be generated from the well-developed parts for efficiency. This development process strongly emphasizes the use of automated tools and saves human labor.
The examples in section 5.5 illustrate several design patterns . Those patterns point out a way in which C constructs can be transformed into DCharts submodels. Designers may model those patterns in separate submodels, and import them into their systems. Tools can also be implemented for this transformation.
For a relatively large system, there may be a lot of those design patterns. Optimization tools and code generation tools may reverse them. They locate every appearance of known patterns, and transform it into equivalent but much simplified C code. This code generation produces much more efficient code than the classes generated in a normal way, which manage all the states and transitions in those patterns.