Comment utiliser doxygen pour créer des diagrammes de classes UML à partir d'une source C ++

90

J'ai cherché du matériel décrivant comment générer des diagrammes de classes simples avec doxygen, mais je n'ai pas pu en trouver. Quelqu'un peut-il aider?

J'ai besoin de créer des diagrammes comme indiqué ci-dessous à partir d'un ensemble de fichiers C ++. texte alternatif

S'il existe de meilleurs outils pour y parvenir plus facilement, veuillez me le faire savoir.

devnull
la source
avez-vous réalisé des diagrammes comme celui-ci comprenant des informations sur les types d'attributs et de méthodes?
Adrian

Réponses:

50

Doxygen crée des diagrammes d'héritage mais je ne pense pas que cela créera une hiérarchie de classes entière. Il vous permet d'utiliser l'outil GraphViz. Si vous utilisez l'outil d'interface graphique Doxygen, vous trouverez les options appropriées dans Step2: -> Wizard tab -> Diagrams. Les options de relation DOT se trouvent sous l'onglet Expert.

DPD
la source
6
Vous pourrez naviguer dans toute la hiérarchie, les limites sont sur ce qui est affiché sur un diagramme. Quelques paramètres limitent la portée du graphique. DOT_GRAPH_NODES limite le nombre d'entrées sur une seule page et MAX_DOT_GRAPH_DEPTH limite sa profondeur. La définition de ces valeurs à des valeurs élevées prend beaucoup de temps pour un grand projet.
DanS
Merci. Cela a fonctionné pour moi. J'ai également remplacé quelques options dans Expert-> Dot
tsenapathy
46

Citation de ce post (il est écrit par l'auteur de doxygen lui-même):

run doxygen -g and change the following options of the generated Doxyfile:

    EXTRACT_ALL            = YES
    HAVE_DOT               = YES
    UML_LOOK               = YES

run doxygen again
moyenne
la source
11
Cela ne générera pas un diagramme de classes complet (par exemple, la relation plusieurs-à-un entre la classe A et la classe B); seulement un diagramme d'héritage, c'est-à-dire montrant les relations superclasse / sous-classe.
stepthom
39

Hmm, cela semble être un peu une vieille question, mais depuis que je me suis amusé avec la configuration de Doxygen ces derniers jours, alors que ma tête est toujours pleine d'informations actuelles, essayons-y -

Je pense que les réponses précédentes l'ont presque:

L'option manquante est d'ajouter COLLABORATION_GRAPH = YESdans le Doxyfile. Je suppose que vous pouvez faire la chose équivalente quelque part dans l'interface graphique de doxywizard (je n'utilise pas doxywizard).

Ainsi, comme exemple plus complet, les options typiques "Doxyfile" liées à la sortie UML que j'ai tendance à utiliser sont:

EXTRACT_ALL          = YES
CLASS_DIAGRAMS      = YES
HIDE_UNDOC_RELATIONS = NO
HAVE_DOT             = YES
CLASS_GRAPH          = YES
COLLABORATION_GRAPH  = YES
UML_LOOK             = YES
UML_LIMIT_NUM_FIELDS = 50
TEMPLATE_RELATIONS   = YES
DOT_GRAPH_MAX_NODES  = 100
MAX_DOT_GRAPH_DEPTH  = 0
DOT_TRANSPARENT      = YES

Ces paramètres généreront à la fois des diagrammes «héritage» ( CLASS_GRAPH=YES) et «collaboration» ( COLLABORATION_GRAPH=YES).

En fonction de votre cible pour le «déploiement» de la sortie doxygen, le réglage DOT_IMAGE_FORMAT = svgpeut également être utile. Avec la sortie svg, les diagrammes sont "évolutifs" au lieu de la résolution fixe des formats bitmap tels que .png. Apparemment, si vous visualisez la sortie dans des navigateurs autres que IE, il y a aussiINTERACTIVE_SVG = YES ce qui permettra "un zoom et un panoramique interactifs" des diagrammes svg générés. J'ai essayé cela il y a quelque temps, et la sortie svg était très attrayante visuellement, mais à l'époque, la prise en charge du navigateur pour svg était encore un peu incohérente, donc j'espère que la situation s'est améliorée récemment.

Comme d'autres commentaires l'ont mentionné, certains de ces paramètres ( DOT_GRAPH_MAX_NODESen particulier) ont des impacts potentiels sur les performances, donc YMMV.

J'ai tendance à détester les réponses de style "RTFM", alors excuses pour cette phrase, mais dans ce cas, la documentation Doxygen est vraiment votre ami, alors consultez la documentation Doxygen sur les paramètres mentionnés ci-dessus - la dernière fois que j'ai regardé, vous pouvez trouver les détails sur http://www.doxygen.nl/manual/config.html .

utilisateur6092647
la source
Bonne réponse. Dans votre réponse, vous avez écrit "CLASS_DIAGRAMS" à la place si "CLASS_GRAPH".
DavidS
Hmm, en fait, maintenant que vous en parlez, je vois que j'ai à la fois CLASS_DIAGRAMS = YES et CLASS_GRAPH = YES. Après avoir vérifié la documentation pour Doxygen 1.8.9.1, j'ai trouvé qu'en fait, CLASS_GRAPH = YES remplacera CLASS_DIAGRAMS = YES afin que les deux options interagissent, avec CLASS_GRAPH = YES ayant la priorité. Donc, en fait, pour les besoins de la question initiale, ce que j'ai fonctionnera, néanmoins bonne prise!
user6092647
vous pouvez également modifier OUTPUT_DIRECTORY et autoriser la recherche RECURSIVE
King's
Vous devrez peut-être également changer le RECURSIVEfichier en OUI
prehistoricpenguin
6

Enterprise Architect construira un diagramme UML à partir du code source importé.

zooropa
la source
J'ai voté pour avoir également répondu à la question "S'il existe de meilleurs outils pour y parvenir plus facilement, merci de me le faire savoir."
kaveish
5

Je pense que vous devrez éditer le fichier doxys et définir GENERATE_UML (quelque chose comme ça) sur true. Et vous devez avoir dot / graphviz installé.

fzhou
la source
12
Parlez-vous de l'option UML_LOOK?
David Doria
@DavidDoria doit l'être. Mais UML_LOOK n'affichera aucun type de données.
Ruud Verhoef
2

Les 2 réponses les plus élevées sont correctes. À partir d'aujourd'hui, la seule chose que je devais changer (par rapport aux paramètres par défaut) était d'activer la génération en utilisant dot au lieu du générateur intégré.

Quelques remarques importantes:

  • Doxygen ne générera pas un diagramme complet réel de toutes les classes du projet . Il générera une image distincte pour chaque hiérarchie. Si vous avez plusieurs hiérarchies de classes non liées, vous obtiendrez plusieurs images.
  • Tous ces diagrammes se trouvent dans html/inherits.htmlou (à partir de la navigation sur le site) classes => class hierarchy => "Aller à la hiérarchie des classes textuelles".
  • C'est une question C ++, parlons donc de modèles. Surtout si vous héritez de T.
    • Chaque instanciation de modèle sera correctement considérée comme un type différent par Doxygen. Les types qui héritent de différentes instanciations auront différentes classes parentes sur le diagramme.
    • Si un modèle de classe foohérite de Tet que le Tparamètre de type de modèle a une valeur par défaut, cette valeur par défaut sera utilisée. S'il y a un type barqui hérite d' foo<U>U est différent de la valeur par défaut, baraura un foo<U>parent. foo<>et bar<U>n'aura pas de parent commun.
    • S'il existe plusieurs modèles de classe qui héritent d'au moins l'un de leurs paramètres de modèle, Doxygen assumera un parent commun pour ces modèles de classe tant que les paramètres de type de modèle ont exactement les mêmes noms dans le code. Cela incite à la cohérence dans la dénomination.
    • CRTP et CRTP inversé fonctionnent simplement.
    • Les arbres d'héritage de modèles récursifs ne sont pas développés. Toutvariant instanciation sera affichée pour hériter variant<Ts...>.
    • Des modèles de classe sans instanciation sont en cours de dessin. Ils auront un<...> chaîne dans leur nom représentant les paramètres de type et non-type qui n'avaient pas de valeurs par défaut.
    • Des spécialisations complètes et partielles de modèle de classe sont également en cours de dessin. Doxygen génère des graphiques corrects si les spécialisations héritent de types différents.
Xeverous
la source