Web pages for the ArgoUML project.
This used to be located at http://argouml-cpp.tigris.org.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
char *
.
To provide a way to generate C++ code from UML model elements loaded
within ArgoUML.
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
C++
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++.
POSSIBLE IMPLEMENTATION:
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
applications
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...
This project is an extension of ArgoUML.
This project uses ANTLR and David Wigg's C++ grammar (ported to java) for supporting reverse engineering of C++ code.