1. #1
    Membre habitué Avatar de Matthieu76
    Homme Profil pro
    Étudiant
    Inscrit en
    mars 2013
    Messages
    191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mars 2013
    Messages : 191
    Points : 166
    Points
    166

    Par défaut Comment générer automatiquement un diagramme de classes UML à partir de code C++ ?

    Bonjour,
    tout est dans le titre, je cherche à générer un diagramme UML à partir de mon code C++/Qt.
    J'ai déjà testé plusieurs solution mais aucune ne fonctionne correctement. (StarUML, Doxygen et Umbrello).
    Avez-vous déjà eu cette problématique ? N'y a-t'il pas un moyen SIMPLE de générer un diagramme UML pour vérifier les dépendances entre mes classes ?

    J'y suis depuis 3 heures et je commence un peu à désespéré, aidez-moi s'il vous plaît !!!

    PS : j'ai 5000 lignes de code dans mon programme et des 10e de classes donc je ne peux pas le faire à la main. J'aimerais refaire toute l'architecture de mon programme car les fondations sont mauvaises mais je ne peux pas le faire si je n'ai pas un outils pour m'aider à y voir un peu plus claire.

  2. #2
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    Développeur informatique
    Inscrit en
    juin 2005
    Messages
    3 378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : juin 2005
    Messages : 3 378
    Points : 5 565
    Points
    5 565

    Par défaut

    Bonjour,

    A priori lorsque vous dite un "diagramme" vous parlez des diagrammes de classes, en tout cas de diagramme statique, pas de cas d'utilisation ou autre bien évidement impossible à produire automatiquement à partir d'un code

    Soyons clair, la production automatique d'un diagramme de classes (en tant que "dessin") n'a aucun sens, la seule possibilité serait de mettre toutes les classes dans le même diagramme ce qui est évidemment absurde, un diagramme doit avoir un but / du sens, ce n'est pas un "tas" de classes rassemblées au hasard

    Ce que vous voulez faire c'est d'abord modéliser vos classes ( sans production de diagramme ) pour cela utilisez un reverse C++, ensuite vous pourrez aisément faire vos diagrammes

    Votre code C++ utilisant Qt ce dernier "pollue" les définitions via des macros additionnelles "slots" / Q_OBJECT ou autre, je gère celles-ci dans Bouml, vous pouvez donc utiliser ce dernier. Bien évidemment avant de faire le reverse retirer les fichiers produits par "moc" qui correspondent à 'implémentation de QT et non à votre application. Sauvegardez vos sources avant de faire le reverse, car si ensuite vous lancez par erreur la génération de code ils seront écrasés
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  3. #3
    Membre habitué Avatar de Matthieu76
    Homme Profil pro
    Étudiant
    Inscrit en
    mars 2013
    Messages
    191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mars 2013
    Messages : 191
    Points : 166
    Points
    166

    Par défaut Explications supplémentaires

    Oui, je parle bien d'un diagramme de classes.
    J'ai utilisé Enterprise Architect pour générer mes les classes, c'est pas trop mal mais malheureusement il ne me crée pas les liaisons "contains" entre les classes, il me fait juste l'héritage. (En gros je veux vérifier les dépendances)
    Moi je que je voudrais c'est par exemple une flèche entre ma classe Algorithm et ma classe Database pour me dire : "Ok, c'est pas normal que la classe Algorithme ait besoin de m’accéder à la base de données, je vais voir ça et utiliser un design pattern pour réglé le problème."


    Nom : Sans titre31.png
Affichages : 48
Taille : 119,5 Ko

    En vrai la solution la plus simple serait de vérifier tous les include/import de chaque entête de fichier pour vérifier qui appelle qui mais c'est ennuyeux à faire et ce n'est pas une bonne méthode de travail.

    Quelqu'un aurait-il une solution viable ?

    PS : La plupart de mes classes sont des singleton, ça doit pas aider.

  4. #4
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    Développeur informatique
    Inscrit en
    juin 2005
    Messages
    3 378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : juin 2005
    Messages : 3 378
    Points : 5 565
    Points
    5 565

    Par défaut

    Citation Envoyé par Matthieu76 Voir le message
    malheureusement il ne me crée pas les liaisons "contains" entre les classes
    "contains" ? vous voulez dire "depends" ?

    Citation Envoyé par Matthieu76 Voir le message
    il me fait juste l'héritage.
    bizarre qu'il n'y ai pas d'association/agrégation et que tout soit présenté comme des attributs

    Citation Envoyé par Matthieu76 Voir le message
    (En gros je veux vérifier les dépendances)
    Moi je que je voudrais c'est par exemple une flèche entre ma classe Algorithm et ma classe Database pour me dire : "Ok, c'est pas normal que la classe Algorithme ait besoin de m’accéder à la base de données, je vais voir ça et utiliser un design pattern pour réglé le problème."
    C'est le genre de truc qui ferait rapidement un plat de nouilles

    A noter que pour produire cela il faudrait aussi décortiquer le code de vos opérations, ce qui revient à faire la partie haute d'un compilateur C++ sachant que lui même ne sait pas vraiment quel est le type des instances sinon les virtuels seraient résolus à la compilation et non à 'exécution

    Citation Envoyé par Matthieu76 Voir le message
    En vrai la solution la plus simple serait de vérifier tous les include/import de chaque entête de fichier pour vérifier qui appelle qui mais c'est ennuyeux à faire et ce n'est pas une bonne méthode de travail.
    oui et non, vous pouvez très bien avoir des #include non pas parce que cela est directement utile mais juste pour vous permettre de faire d'autres #include

    Si Enterprise Architect vous permet de fouiller/modifier le modèle automatiquement (comme mes"plug-out" dans bouml) vous pouvez toujours chercher les classes utilisées (hors corps des opération) afin d'ajouter les dépendances "visibles", ce sera déjà ça

    Citation Envoyé par Matthieu76 Voir le message
    La plupart de mes classes sont des singleton
    Bizarre, mais je ne vois pas en quoi ca gène pour le calcul des dépendances
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  5. #5
    Membre habitué Avatar de Matthieu76
    Homme Profil pro
    Étudiant
    Inscrit en
    mars 2013
    Messages
    191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mars 2013
    Messages : 191
    Points : 166
    Points
    166

    Par défaut

    Tout d'abord, merci pour ta réponse.

    Citation Envoyé par bruno_pages
    vous pouvez toujours chercher les classes utilisées (hors corps des opération) afin d'ajouter les dépendances "visibles"
    Oui, en gros c'est ça que je cherche à faire mais je ne sais pas trop comment faire et il y a très peu d'aide sur internet.

    Finalement je pense que fais faire le diagramme moi-même sous StarUML, c'est IDE le plus simple et avec le meilleur design. C'est un peu triste mais bon ça sera plus rapide que de chercher à le générer automatiquement.


    Nom : 32.png
Affichages : 44
Taille : 99,3 Ko


    Du coup ça me donne quelque chose comme ça. Mon diagramme n'est pas fini mais je le complèterai au fur et à mesure. Comme je disais là on voit déjà qu'il y a beaucoup trop d'appel à ma base de données alors que je pourrais passer par ma factory. Je pense que pour être sur de n'appeler que les bonnes classes je vais passer par l'utilisation de namespaces.

    Citation Envoyé par bruno_pages
    vous pouvez très bien avoir des #include non pas parce que cela est directement utile mais juste pour vous permettre de faire d'autres #include
    Je ne vois pas en très bien comment car les #include utile à d'autre son déjà présent dans le fichier de l'include.

    Citation Envoyé par bruno_pages
    C'est le genre de truc qui ferait rapidement un plat de nouilles
    Justement, j'aimerais éviter d'avoir le plat de nouilles dans mon code c'est pour ça que j'aimerais le visualiser, ça sera plus facile à démêler par la suite.

Discussions similaires

  1. Générer des diagrammes UML à partir des fichiers XML
    Par yahyaoui.yahya dans le forum XML
    Réponses: 4
    Dernier message: 02/03/2014, 12h24
  2. Réponses: 17
    Dernier message: 03/05/2011, 12h35
  3. Réponses: 4
    Dernier message: 23/03/2009, 15h34
  4. Réponses: 3
    Dernier message: 12/02/2007, 15h21
  5. [WSAD]Générer un diagramme UML à partir du code
    Par Mynautor dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 14/09/2005, 01h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo