Verwendung von doxygen zum Erstellen von UML-Klassendiagrammen aus einer C ++ - Quelle


90

Ich habe nach Material gesucht, das beschreibt, wie einfache Klassendiagramme mit Sauerstoff erstellt werden, konnte aber keines finden. Kann jemand helfen?

Ich muss Diagramme wie unten gezeigt aus einer Reihe von C ++ - Dateien erstellen. Alt-Text

Wenn es bessere Werkzeuge gibt, um dies einfacher zu erreichen, lassen Sie es mich bitte wissen.

Antworten:


50

Doxygen erstellt Vererbungsdiagramme, aber ich glaube nicht, dass dadurch eine ganze Klassenhierarchie erstellt wird. Sie können damit das GraphViz-Tool verwenden. Wenn Sie das Doxygen GUI-Frontend-Tool verwenden, finden Sie die entsprechenden Optionen in Step2: -> Wizard tab -> Diagrams. Die Optionen für die DOT-Beziehung befinden sich auf der Registerkarte "Experte".


6
Sie können durch die gesamte Hierarchie navigieren. Die Grenzen liegen in der Darstellung in einem Diagramm. Es gibt einige Parameter, die den Umfang des Diagramms einschränken. DOT_GRAPH_NODES begrenzt die Anzahl der Einträge auf einer einzelnen Seite und MAX_DOT_GRAPH_DEPTH schränkt die Tiefe ein. Wenn Sie diese Werte auf große Werte einstellen, ist dies für ein großes Projekt sehr zeitaufwändig.
DanS

Vielen Dank. Es hat bei mir funktioniert. Ich habe auch einige Optionen in Expert-> Dot
tsenapathy

46

Zitat aus diesem Beitrag (geschrieben vom Autor von doxygen selbst):

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

    EXTRACT_ALL            = YES
    HAVE_DOT               = YES
    UML_LOOK               = YES

run doxygen again

11
Dadurch wird kein vollständiges Klassendiagramm generiert (z. B. die Viele-zu-Eins-Beziehung zwischen Klasse A und Klasse B). nur ein Vererbungsdiagramm, dh, das Beziehungen zwischen Oberklasse und Unterklasse zeigt.
stepthom

39

Hmm, das scheint eine alte Frage zu sein, aber da ich in den letzten Tagen mit der Doxygen-Konfiguration herumgespielt habe, während mein Kopf noch voller aktueller Informationen ist, versuchen wir es mal -

Ich denke, die vorherigen Antworten haben es fast geschafft:

Die fehlende Option ist das Hinzufügen COLLABORATION_GRAPH = YESin der Doxy-Datei. Ich gehe davon aus, dass Sie das Gleiche irgendwo in der Benutzeroberfläche des Doxy-Assistenten tun können (ich verwende den Doxy-Assistenten nicht).

Als vollständigeres Beispiel sind typische "Doxyfile" -Optionen im Zusammenhang mit der UML-Ausgabe, die ich normalerweise verwende:

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

Diese Einstellungen erzeugen sowohl "Vererbungs-" ( CLASS_GRAPH=YES) als auch "Kollaborations" COLLABORATION_GRAPH=YES-Diagramme ( ).

Abhängig von Ihrem Ziel für die "Bereitstellung" der Sauerstoffausgabe kann die Einstellung DOT_IMAGE_FORMAT = svgebenfalls hilfreich sein. Bei der SVG-Ausgabe sind die Diagramme anstelle der festen Auflösung von Bitmap-Formaten wie .png "skalierbar". Wenn Sie die Ausgabe in anderen Browsern als dem IE anzeigen, können Sie anscheinend auch INTERACTIVE_SVG = YESdie generierten SVG-Diagramme "interaktiv zoomen und schwenken". Ich habe dies vor einiger Zeit versucht und die SVG-Ausgabe war optisch sehr attraktiv, aber zu der Zeit war die Browserunterstützung für SVG noch etwas inkonsistent, so dass sich diese Situation hoffentlich in letzter Zeit verbessert hat.

Wie bereits in anderen Kommentaren erwähnt, haben einige dieser Einstellungen ( DOT_GRAPH_MAX_NODESinsbesondere) potenzielle Auswirkungen auf die Leistung, so YMMV.

Ich hasse Antworten im "RTFM" -Stil, also entschuldige ich mich für diesen Satz, aber in diesem Fall ist die Doxygen-Dokumentation wirklich dein Freund. Schauen Sie sich also die Doxygen-Dokumente zu den oben genannten Einstellungen an. Als ich das letzte Mal nachgesehen habe, finden Sie die Details unter http://www.doxygen.nl/manual/config.html .


Gute Antwort. In Ihrer Antwort haben Sie stattdessen "CLASS _DIAGRAMS" geschrieben, wenn "CLASS_GRAPH".
DavidS

Hmm, eigentlich, jetzt, wo Sie es ansprechen, habe ich sowohl CLASS_DIAGRAMS = YES als auch CLASS_GRAPH = YES. Nachdem ich die Dokumente auf Doxygen 1.8.9.1 überprüft hatte, stellte ich fest, dass CLASS_GRAPH = YES CLASS_DIAGRAMS = YES überschreibt, sodass die beiden Optionen interagieren, wobei CLASS_GRAPH = YES Vorrang hat. Also eigentlich für die Zwecke der ursprünglichen Frage, was ich habe, wird funktionieren, trotzdem guter Fang!
user6092647

Sie können auch das OUTPUT_DIRECTORY ändern und die RECURSIVE-Suche zulassen
King's Jester

Möglicherweise müssen Sie auch die RECURSIVEDatei in YES
prähistoricpenguin

6

Enterprise Architect erstellt ein UML-Diagramm aus importiertem Quellcode.


Für die Beantwortung der Frage "Wenn es bessere Tools gibt, um dies einfacher zu erreichen, lassen Sie es mich bitte wissen."
kaveish

5

Ich denke, Sie müssen die doxys-Datei bearbeiten und GENERATE_UML (so ähnlich) auf true setzen. Und Sie müssen dot / graphviz installiert haben.


12
Sprechen Sie über die Option UML_LOOK?
David Doria

@ DavidDoria muss sein. UML_LOOK zeigt jedoch keine Datentypen an.
Ruud Verhoef

2

Die 2 am höchsten bewerteten Antworten sind korrekt. Ab heute musste ich nur noch die Generierung mit Punkt anstelle des eingebauten Generators aktivieren (gegenüber den Standardeinstellungen) .

Einige wichtige Hinweise:

  • Doxygen generiert nicht ein vollständiges Diagramm aller Klassen im Projekt . Es wird ein separates Bild für jede Hierarchie generiert. Wenn Sie mehrere nicht verwandte Klassenhierarchien haben, erhalten Sie mehrere Bilder.
  • Alle diese Diagramme finden Sie in html/inherits.htmloder (über die Website-Navigation) Klassen => Klassenhierarchie => "Zur textuellen Klassenhierarchie wechseln".
  • Dies ist eine C ++ - Frage. Lassen Sie uns also über Vorlagen sprechen. Vor allem, wenn Sie von erben T.
    • Jede Vorlageninstanziierung wird von Doxygen korrekt als ein anderer Typ betrachtet. Typen, die von verschiedenen Instanzationen erben, haben unterschiedliche übergeordnete Klassen im Diagramm.
    • Wenn eine Klassenvorlage von fooerbt Tund der TVorlagentypparameter einen Standardwert hat, wird dieser Standardwert angenommen. Wenn es einen Typ gibt, barder von foo<U>wo erbt, der sich vom UStandard unterscheidet, barhat er einen foo<U>übergeordneten Typ . foo<>und bar<U>wird keinen gemeinsamen Elternteil haben.
    • Wenn es mehrere Klassenvorlagen gibt, die von mindestens einem ihrer Vorlagenparameter erben, übernimmt Doxygen ein gemeinsames übergeordnetes Element für diese Klassenvorlagen, solange die Vorlagentypparameter im Code genau dieselben Namen haben. Dies ist ein Anreiz für eine einheitliche Benennung.
    • CRTP und Reverse CRTP funktionieren einfach.
    • Rekursive Vorlagenvererbungsbäume werden nicht erweitert. Jede variantInstanziierung wird angezeigt, von der geerbt werden soll variant<Ts...>.
    • Klassenvorlagen ohne Instanziierungen werden gezeichnet. Der <...>Name enthält eine Zeichenfolge, die Typ- und Nicht-Typ-Parameter darstellt, für die keine Standardeinstellungen festgelegt wurden.
    • Es werden auch vollständige und teilweise Spezialisierungen für Klassenvorlagen gezeichnet. Doxygen generiert korrekte Diagramme, wenn Spezialisierungen von verschiedenen Typen erben.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.