Authors:
Van Cam Pham
;
Ansgar Radermacher
and
Sébastien Gérard
Affiliation:
CEA, France
Keyword(s):
UML State Machine, Code Generation, Change Reflection, Programmers, Software Architects, C++, Java Annotation Processing, Programming Language, Component-based Design, Source Code Organization, Incremental Reverse.
Related
Ontology
Subjects/Areas/Topics:
Applications and Software Development
;
Component-Based Software Engineering
;
General-Purpose Modeling Languages and Standards
;
Languages, Tools and Architectures
;
Methodologies, Processes and Platforms
;
Model Transformation
;
Model Transformations and Generative Approaches
;
Model-Driven Software Development
;
Models
;
Paradigm Trends
;
Software Engineering
;
Syntax and Semantics of Modeling Languages
Abstract:
Model-Driven Engineering (MDE) increases the abstraction level, thus facilitates the design of complex systems. It is possible to create an executable system from a model enriched with detailed behavior specifications.
But the graphical modeling of some system aspects is likely less efficient compared to writing code in a programming language. For method signatures, textual editing includes a few lines of text, whereas modeling requires the separate addition of methods along with their parameters.
Therefore, we propose to develop systems by combining the strength of graphical modeling with programming languages by allowing a developer to make changes in either notation and synchronize the result with the other one, respectively. Synchronization between model and code is already supported by existing tools, but often restricted to structural elements that have a 1-1 mapping.
The synchronization of additional modeling aspects from the code, notably component based modeling in U
ML and behavior in form of state-machines, is not supported by the state-of-the-art. In order to enable this synchronization, it is important to reduce the abstraction gap and assure a 1-1 mapping if possible. Our proposition is to perform the synchronization with an extended programming language that provides additional language elements for some UML elements, notably those that do not already exist in object-oriented programming languages. This extension uses built-in language facilities, in case of C++ templates and preprocessor macros, and a design pattern that adds a shadow implementation.
(More)