This is the ArgoUML C++ project. The purpose is to provide the ability to generate C++ from ArgoUML, read C++ source files and generate an UML model and diagrams within ArgoUML, and eventually allow full round-trip engineering for C++.
The C++ generation is provided with all ArgoUML releases since 0.13.2 (March 2003) in the "modules"-file. The supported functionalities are documented in the ArgoUML user manual, User Manual 0.24 Appendix D. The C++ Module.
The purpose of the C++ module is explained above.
But, here we detail this in order to make it more clear.
Specifically, the main target of this module is to enable the Model Driven
Development (MDD) of C++ software.
The user will model UML which is close to the C++
code that should be generated.
He will specify what is a reference, what is a
pointer, what assumes a
std::string and what should be a
To provide a way to generate C++ code from UML model elements loaded
With the C++ module installed, it is possible to generate C++ source files for these model elements. The C++ module provides this functionality to the user in the same way the other modules do – see ArgoUML's manual 0.24, Code generation. There are some requirements for doing this, like using specific tagged values or stereotypes.
Enable the use of C++ notation in ArgoUML
A person that models directly a C++ software in UML will be able to see it as similar to the C++ code as possible. One of the great features of ArgoUML is that it enables you to do this easily for class diagrams.
IDEAS FOR FUTURE WORK
Provide a base UML Profile for C++ that might be a target for
MDA tooling PIM to PSM transformations.
As java has the JSR 26, C++ should have a profile. Alas, no standard profile exists. So, ArgoUML provides one and since we are an open source project, we get reviewed, improved with the time and some time in the future, it might get into a standard status [yeah, we aim high ;->]! This profile shall be shared by the code generator and reverse engineering, so that we have a common view of the mapping between UML and C++.
Provide reverse engineering of C++ code.
Work has started in this, but, with C++ this is much more difficult than with say... Java! C++ source code has the preprocessor, it requires heavy use of templates (see issue for ArgoUML related to this), it is largely compatible with C, etc... Many persons don't believe that this is feasible in a robust and workable way. [Just check the very expensive UML packages that support this... Its truly disappointing...] Here we just say that we'll try.
Wild dream: in a perfect world, it should be possible to completely reverse a program from its GNU makefile(s).
Provide round-trip engineering for C++
If we support code generation and reverse engineering and if both map between C++ and UML with a common UML profile as a basis, this will not be very difficult.
Provide critics oriented towards C++
In the future we aim to define critics specific to the C++ language. Currently in ArgoUML we have to see all the Java critics even if we're not considering this language as a target. The multiple inheritance will really get into your nerves ;->! The C++ module will change this.
Provide the C++ standard library with the UML profile for
The user will want to have the std lib objects, types and functions at his fingertips when modeling C++ software with ArgoUML. This will be provided via the base UML Profile for C++.
With the availability of great open source implementations of the std lib, and if we support a good reverse engineering, then, we could use this functionality to reverse one of these and load it into the UML world. After that, defining a custom cleanup model to model transformation of the result, we could get a model of the std lib which only contains its interface and documentation. What do you think of that?
Provide commonly used C++ libraries as possible add-ons for the
base UML Profile for C++
Provide complete generation of very simple
It should be possible for a person who is getting started in MDD of C++ software to generate completely an "Hello World" type of application from the C++ module. We could provide this in the form of a tutorial, so that users would be supported at this work. The C++ module could even generate the makefiles for this type of project...