Login | Register
My pages Projects Community openCollabNet

Project home

If you were registered and logged in, you could join this project.

Summary C++ support in ArgoUML
Category design
License Eclipse Public License - v 1.0
Owner(s) euluis, linus


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.

If you want to work with the project

  1. Join the project.
  2. Join the mailing list for the developers of this project found among the mailing lists of this project
  3. Get acquainted with the current status of the project.
  4. Announce your intentions on the dev mailing list.
  5. Get in contact with one of the registered developer of this project so that you can get your work commited.

Upcoming Milestones

  1. Make the UML Profile for C++ available from within the module, so that it is easier to model C++ in ArgoUML in a structured way. We're working on this!
  2. Work to clean-up the issues list.
  3. Implement support for templates in ArgoUML – without this it is very difficult to "sell" the use of ArgoUML for C++ MDD. We're working on this!
  4. Refactor the C++ generator, so that it isn't one big class (checkstyle complains about it being greater than 2000 lines) and in order to use the UML Profile for C++ instead of having all the dirty details hard-coded. TODO: create an issue.
  5. Ditto for the C++ importer.
  6. Update the ANTLR C++ grammar for java from David's Wigg latest version of the C++ grammar for C++. While at it, fix the problem of not being able to parse the test example that comes with the original grammar. See Luis' blog entry on this.

Objectives of the ArgoUML 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.

    • In the future maybe more diagrams will contain this "pluggable notation" mechanism and the C++ module will provide a C++ taste to your UML diagrams.
    • Possibly in the future we'll support also parsing of C++ notation within the diagrams. This would enable the C++ developer to specify the UML elements the familiar way he writes C++ code. Probably he would be much more happy with ArgoUML this way...

  • 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++.
    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...

Related resources

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.

This page was last updated $Date: 2007-08-27 05:14:28 -0700 (Mon, 27 Aug 2007) $.