Articles tagged with uml

l'UML automatisé et le libre : c'est pas gagné!

Je recherche en ce moment des outils qui me permettraient d'importer/exporter de l'uml pour un projet C++ que je vais faire cet été. L'idée est la suivante : je souhaiterais que les modifications de mon code soient répercutées sur un fichier contenant de l'uml sous un format quelconque, et je souhaiterais par ailleurs pouvoir générer du code à partir de ce format. Idéalement, une règle dans le Makefile, appelée à chaque génération du projet serait idéale pour ce genre de truc. À moins que j'ai mal compris, Umbrello est bien capable de générer du code, mais malheureusement l'import est une autre histoire : si celui-ci est bien capable d'importer une classe à partir du C++, en revanche il ne génère aucun diagramme (voir la page consacrée de l'aide):

Note that Umbrello UML Modeller will not create any kind of Diagram for showing your classes, they will only be imported into your Model so that you can use them later in any diagram you want.

J'ai aussi jeté un coup d'oeil du côté d'ArgoUml. Malheureusement, de ce côté non plus c'est pas la panacée puisqu'ici on ne parle que de java : moi, je veux du C++.

What is ArgoUML? ~ [...] ArgoUML also has the ability to reverse engineer compiling Java code and generate UML diagrams for it.

En allant inspecter les moteurs de recherche, j'ai fini par tomber sur un outil intéressant:dia2code. Celui-ci prend en entrée un schéma uml en dia, et génère du code dans le langage choisi. J'ai regardé la section examples du site, c'est assez convaincant. Pour ce schéma :

uml_dia.png

Les fichiers suivants seront générés :

foowindow.cpp 1/14

#include "foowindow.h"

void FooWindow::redraw (  ){
}

foowindow.h 2/14

#ifndef FOOWINDOW_H
#define FOOWINDOW_H

#include "window.h"

class FooWindow: public Window {
  // Associations
  // Attributes
  // Operations
  public:
    void redraw (  );
};

#endif

foowindowmanager.cpp 3/14

#include "foowindowmanager.h"

foowindowmanager.h 4/14

#ifndef FOOWINDOWMANAGER_H
#define FOOWINDOWMANAGER_H

#include "windowmanager.h"

class FooWindowManager: public WindowManager {
  // Associations
  // Attributes
  // Operations
};

#endif

point.cpp 5/14

#include "point.h"

Point::Point ( float x, float y ){
}

float Point::getX (  ){
}

float Point::getY (  ){
}

point.h 6/14

#ifndef POINT_H
#define POINT_H

class Point {
  // Associations
  // Attributes
  private:
    float x;
    float y;
  // Operations
  public:
    Point ( float x, float y );
    float getX (  );
    float getY (  );
};

#endif

rectangle.cpp 7/14

#include "rectangle.h"

float Rectangle::getArea (  ){
}

rectangle.h 8/14

#ifndef RECTANGLE_H
#define RECTANGLE_H

#include "point.h"
#include "shape.h"

class Rectangle: public Shape {
  // Associations
   Point points;
  // Attributes
  // Operations
  public:
    float getArea (  );
};

#endif

shape.cpp 9/14

#include "shape.h"

shape.h 10/14

#ifndef SHAPE_H
#define SHAPE_H

class Shape {
  // Associations
  // Attributes
  // Operations
  public:
    virtual float getArea (  ) = 0;
};

#endif

window.cpp 11/14

#include "window.h"

window.h 12/14

#ifndef WINDOW_H
#define WINDOW_H

#include "shape.h"

class Window {
  // Associations
  // Attributes
  private:
    Shape visualrep;
  // Operations
  public:
    virtual void redraw (  ) = 0;
};

#endif

windowmanager.cpp 13/14

#include "windowmanager.h"

windowmanager.h 14/14

#ifndef WINDOWMANAGER_H
#define WINDOWMANAGER_H

#include "window.h"

class WindowManager {
  // Associations
   Window windows;
  // Attributes
  // Operations
};

#endif

Pas mal. Il y a de l'idée. Maintenant, cherchons s'il existe le procédé inverse. J'ai trouvé trois outils capables de générer de l'uml dia à partir du C++ : cpp2dia, autodia, et medoosa. Autant vous dire tout de suite que rien de spécialement convaincant ne sort de ces programmes.

Conclusion: rien de bien convaincant pour l'instant. Cependant, je n'avais pas encore regardé bouml et je viens de voir qu'ils mentionnaient le genre de fonctionnalités que je recherche. Quelqu'un a testé? Ou bien dans le cas général, connaissez-vous un quelque chose capable de faire mon bonheur?

To the comments
Atom feed