Klassendiagramm

Ein Klassendiagramm beschreibt die statische Struktur eines Systems: seine Klassen, deren Attribute und Methoden sowie die Beziehungen zwischen ihnen. Es ist das gebräuchlichste UML-Diagramm zur Dokumentation von Codeorganisation und Entwurf.

In PlantUML lehnt sich die Syntax an Programmiersprachen an, sodass Attribute, Methoden und Sichtbarkeitskennzeichen vertraut wirken. Beziehungen werden mit demselben Pfeilstil wie in Sequenzdiagrammen dargestellt.

Weitere Funktionen, die für alle Diagrammtypen verfügbar sind, finden Sie unter allgemeine Befehle.

Element deklarieren

[Ref. für protocol und struct: GH-1028, für exception: QA-16258]

[Ref. for protocol and struct: GH-1028, for exception: QA-16258, for record and dataclass: GH-2232]

[Ref. for protocol and struct: GH-1028; for exception: GH-1056, QA-16258; for metaclass and stereotype: GH-1159, QA-16784; for record and dataclass: GH-2232]
WARNING
 This translation need to be updated. 
WARNING

Beziehungen zwischen Klassen

Beziehungen zwischen Klassen werden mit den folgenden Symbolen gekennzeichnet:

Typ Symbol Zweck
Erweiterung <|-- Spezialisierung einer Klasse in einer Hierarchie
Implementierung <|.. Verwirklichung einer Schnittstelle durch eine Klasse
Komposition *-- Der Teil kann nicht ohne das Ganze existieren
Aggregation o-- Der Teil kann unabhängig vom Ganzen existieren
Abhängigkeit --> Das Objekt benutzt ein anderes Objekt
Abhängigkeit ..> Eine schwächere Form der Abhängigkeit

Es ist möglich -- durch .. zu ersetzen, um eine gestrichelte Linie zu erhalten.

Wenn man diese Regeln kennt, ist es möglich, die folgenden Zeichnungen zu zeichnen:

WARNING
 This translation need to be updated. 
WARNING

Beschriften von Beziehungen

Beziehungen können beschriftet werden, durch das Anhängen eines Doppelpunktes : gefolgt von dem Beschriftungstext.

Um Kardinalität anzuzeigen, verwendet man doppelte Anführungszeichen "" auf jeder Seite der Beziehung.

Um zu zeigen, in welche Richtung die Beziehung wirkt, können an die Beschriftung zusätzliche Pfeilspitzen angehängt werden, indem man vor die Beschriftung < oder nach der Beschriftung > verwendet.

Verwendung von Sonderzeichen

Wenn sie in dem Name Ihrer Klasse (oder des Enums, oder der Schnittstelle) Zeichen verwenden wollen, dann gibt es die folgenden Möglichkeiten:

Also note that names starting with $ are valid, but to assign an alias to such element the name must be put between quotes "".
WARNING
 This translation need to be updated. 
WARNING

Methoden hinzufügen

Um Feldern und Methoden zu einer Klasse hinzuzufügen, wird der Doppelpunkt : gefolgt von dem Namen des Feldes oder der Methode verwendet.

Das System erkennt anhand der Klammern, ob es sich um eine Methode oder um ein Feld handelt.

Es ist möglich in Klammern, Feldern und Methoden mit {} zu gruppieren

Die Syntax ist sehr flexibel bezüglich der Reihenfolge der Typen und Namen.

Sie können die Modifier {field} und {method} verwenden, um das Standardverhalten des Parsers bei Feldern und Methoden zu übersteuern.

Sichtbarkeit festlegen

Beim Definieren von Methoden und Feldern kann die Sichtbarkeit mit einem der folgenden Zeichen festgelegt werden:

Character Icon for field Icon for method Visibility
- private
# protected
~ package private
+ public

Mit dem skinparam classAttributeIconSize 0 Befehl kann dieses Verhalten ausgeschaltet werden :

*[Ref. [QA-4755](https://forum.plantuml.net/4755/provide-display-visibility-attributes-private-protected)]*
WARNING
 This translation need to be updated. 
WARNING

Visibility on compositions and aggregations

[Ref. QA-8294]

Abstract und Static

Sie können statische oder abstrakte methoden und statische Attribute durch benutzen des {static} oder {abstract} Modifikators definieren.

Diese Modifikatoren können am Anfang oder am Ende der Zeile benutzt werden. Es kann auch {classifier} statt {static} benutzt werden.

Der Klassenrumpf für Fortgeschrittene

Standardmäßig werden die Methoden und Felder im Klassenrumpf automatisch von PlantUML gruppiert. Mit Hilfe von Trennzeichen können Felder und Methoden aber auch selber geordnet werden. Folgende Trennzeichen sind möglich: -- (einfache durchzogene Linie), .. (einfache unterbrochene Linie), == (doppelte durchzogene Linie, __ (dicke durchzogene Linie).

Es können auch Titel innerhalb des Trennzeichen angegeben werden:

Notizen und Stereotypen

Stereotypen werden mit dem Schlüsselwort class oder mit den Symbolen << (doppelte spitze Klammer links) und >> (doppelte spitze Klammer rechts) definiert. Zwischen den Klammern wird der Name des Stereotyps angegeben.

Mit den note left of , note right of, note top of , note bottom of Schlüsselwörtern kann man Notizen und ihre Position festlegen.

Eine Notiz zur zuletzt definierten Klasse wird mit den Schlüsselwörtern note left, note right,note top, note bottom hinzugefügt.

Eine Notiz kann aber auch nur mit dem note Schlüsselwort erstellt werden und dann mit dem .. Symbol den Klassen zugeordnet werden.

WARNING
 This translation need to be updated. 
WARNING

Mehr zu Notizen

Es ist auch möglich einige HTML Tags wie (See Creole expression):

Es ist auch möglich eine Notiz über mehrere Zeilen zu erstellen.

Eine Notiz bezogen auf die letzte definierte Klasse kann mit note left, note right, note top oder note bottom erstellt werden.

WARNING
 This translation need to be updated. 
WARNING

Note on field (field, attribute, member) or method

It is possible to add a note on field (field, attribute, member) or on method.

⚠ Constraint

Note on field or method

Note on method with the same name

[Ref. QA-3474 and QA-5835]

Notizen zu Beziehungen

Eine Notiz zu einer Beziehung kann direkt nach der Beziehungsdefinition erfolgen: note on link.

Zur relativen Positionierung der Notiz können die Schlüsselwörter note left on link, note right on link, note top on link, note bottom on link verwendet werden.

Abstrakte Klassen und Interfaces

Eine abstrakte Klasse lässt sich über das abstract oder das abstract class Schlüsselwort definieren. Die Klasse wird dann kursiv gedruckt.

Man kann auch die interface, annotation und enum Schlüsselwörter verwenden.

*[Ref. 'Annotation with members' [Issue#458](https://github.com/plantuml/plantuml/issues/458)]*
WARNING
 This translation need to be updated. 
WARNING

Verstecken von Attributen, Methoden ...

Die Anzeige einer Klasse kann über das hide/show Kommando parametrisiert werden.

Der Basisbefehl ist hide empty members. Mit diesem Befehl werden leere Atribute und Methoden ausgeblendet.

Anstelle von empty members kann man auch die folgenden Befehle verwenden: Nach dem hide oder dem show Schlüsselwort kann man auch noch die folgenden Befehle anfügen:

Es lassen sich mehrere show/hide Befehle verketten, um Regeln und ausnahmen festzulegen.

*[Ref. [QA-2913](https://forum.plantuml.net/2913/hiding-based-on-visibilty?show=2916#a2916)]*
WARNING
 This translation need to be updated. 
WARNING

Verstecken von Klassen

Mit den show/hide Befehlen können Klassen versteckt werden.

Dies kann hilfreich sein, wenn man eine große !included Datei verwendet und dann einige Klassen nach dem einbinden der Datei verstecken möchte.

WARNING
 This translation need to be updated. 
WARNING

Klassen entfernen

Sie können auch den Befehl remove verwenden, um Klassen zu entfernen.

Dies kann nützlich sein, wenn Sie eine große !included-Datei definieren, und wenn Sie einige Klassen nach dem einbinden der Datei entfernen möchten.

Hide, Remove or Restore tagged element or wildcard

You can put $tags (using $) on elements, then remove, hide or restore components either individually or by tags.

By default, all components are displayed:

But you can:

Hide or Remove unlinked class

By default, all classes are displayed:

But you can:

[Adapted from QA-11052]

Verwenden von Generics

Mit spitzen Klammern ( < und >) kann die Verwendung von Generics dargestellt werden.

Man kann diese Darstellung mittels des Befehls skinparam genericDisplay old ausschalten.

Besondere Hervorhebungen

Normalerweise werden Klassen, Schnittstellen, Enums und abstrakte Klassen mit einem hervorgehobenen Buchstaben gekennzeichnet (C, I, E or A).

Es ist aber auch möglich eine eigene Hervorhebung zu erstellen wenn man einen Stereotyp definiert. Das wird durch hinzufügen eines einzelnen Buchstabens und einer Farbe so wie im folgenden Beispiel erreicht:

Pakete

Pakete können über das package Schlüsselwort definiert werden. Auf Wunsch kann außerdem die die Hintergrundfarbe für das Paket festgelegt werden. Dies kann durch den Farbnamen oder den HTML Code geschehen.

Es ist möglich, Pakete ineinander zu schachteln.

WARNING
 This translation need to be updated. 
WARNING

Paketarten

Es stehen verschiedene Arten von Paketen zur Verfügung.

Welches Paket zur Verwendung kommen soll, kann mit dem Befehl skinparam packageStyle festgelegt werden. Alternativ kann ein Stereotyp in der Paketdefinition verwendet werden.

Außerdem ist es möglich, Abhängigkeiten zwischen Paketen zu definieren, wie dies im folgenden Beispiel gezeigt wird:

Namensraum

In Paketen ist der Name einer Klasse der eindeutige Bezeichner der Klasse. Das bedeutet, das man nicht zwei Klassen mit dem gleichen Namen in unterschiedlichen Paketen haben kann.

In diesem Fall sollte ein Namensraum anstelle eine Pakets verwendet werden.

Man kann auf eine Klasse aus einem anderen Namensraum verweisen, in dem man den voll qualifizierten Namen der Klasse angibt. Klassen aus dem Standartnamensraum werden mit einem beginnenden Punkt gekennzeichnet.

Beachten Sie, das ein Namensraum nicht explizit festgelegt werden muss: Eine vollqulifizierte Klasse verwendet automatisch den richtigen Namensraum.

There won't be any difference between namespaces and packages anymore: both keywords are now synonymous.

There won't be any difference between ``namespaces`` and ``packages`` anymore: both keywords are now synonymous.
WARNING
 This translation need to be updated. 
WARNING

Automatische Erzeugung eines Namensraums

Über folgenden Befehl kann ein anderes Trennzeichen (als der Punkt) definiert werden: set namespaceSeparator ???.

Die automatische Erzeugung eines Pakets kann mit set namespaceSeparator none deaktiviert werden.

WARNING
 This translation need to be updated. 
WARNING

Lollipop Schnittstellen

Mit der folgenden Syntax kann man Schnittstellen von Klassen definieren:

Ändern der Pfeilrichtung

Normalerweise werden Beziehungen zwischen Klassen mit zwei Strichen -- definiert und die Klassen werden Vertikal angeordnet. Verwendet man nur einen Strich (oder Punkt), dann werden die Klassen horizontal angeordnet so wie im folgenden Beispiel zu sehen ist:

Man kann die Richtung auch durch das Umdrehen der Verbindung ändern:

Außerdem ist es möglich, die Richtung der Pfeile durch Hinzufügen der left, right, up oder down Schlüsselwörter innerhalb der Pfeile zu verändern:

Die Länge der Pfeile kann verkürzt werden, in dem man nur den ersten Buchstaben für die Richtung verwendet (zum Beispiel, -d- anstelle von -down-) oder die ersten beiden Buchstaben (-do-)

Bitte verwenden Sie diese Möglichkeit nur wenn es unbedingt sein muss: GraphViz liefert normalerweise recht gute Ergebnisse ohne das manuell eingegriffen werden muss.

WARNING
 This translation need to be updated. 
WARNING

Assoziationsklassen

Nach dem man eine Beziehung zwischen zwei Klassen definiert hat, kann man eine association class definieren. Hierzu ein Beispiel:

Die Richtung lässt ich aber auch ändern:

Assoziation in derselben Klasse

[Ref. Inkubation: Assoziationen]

Der Skinparam-Befehl

Mit dem skinparam Befehl kann die Farbe und die Schriftart der Zeichnung verändert werden.

Sie können den Befehl auf die folgenden Arten verwenden:

Das Aussehen von Stereotypen verändern

Es ist möglich die Farbe und die Schriftart der Klassen zu verändern, die mit einem Stereotypen ausgezeichnet sind.

Any of the spaces shown as `_` below will cause all skinparams to be ignored, see [discord discussion](https://discord.com/channels/1083727021328306236/1289954399321329755/1289967399302467614) and [issue #1932](https://github.com/plantuml/plantuml/issues/1932):
WARNING
 This translation need to be updated. 
WARNING

Farbverlauf

Mit der # Notation können individuelle Farben für Klassen oder Notizen definiert werden.

Es kann entweder der Standardname der Farbe oder der RGB Code verwendet werden.

Für den Hintergrund kann ebenfalls ein Farbverlauf verwendet werden: Zwei Farbnamen getrennt durch: abhängig von der Richtung des Verlaufs.

So könnte dies zum Beispiel aussehen:

WARNING
 This translation need to be updated. 
WARNING

Hilfe beim Layout

Manchmal ist das vorgegebene Layout nicht optimal.

Sie können das together Schlüsselwort benutzen, um der Layout-Engine die Anweisung zu geben einige Klassen zu gruppieren (ähnlich einem package).

Mit hidden Links kann man auch ein Layout erzwingen.

Große Dateien aufteilen

Manchmal erhält man sehr große Bilddateien.Mit dem page (hpages)x(vpages) Befehl kann das erzeugte Bildauf mehrere Dateien verteilt werden:

Mit dem page (hpages)x(vpages) Befehl kann das erzeugte Bild auf mehrere Dateien aufgeteilt werden:

hpages gibt die Anzahl von horizontalen Seiten an, und vpages gibt die Anzahl von vertikalen Seiten an.

Die Verwendung von skinparam Definitionen, ermöglicht die Darstellung von Außenrahmen für mehrseitige Bilder. (Siehe nachfolgendes Beispiel)

Extends und Implements

Es ist auch möglich, die Schlüsselwörter extends und implements zu verwenden.

*[Ref. [QA-2239](https://forum.plantuml.net/2239/is-multiple-inheritance-or-implementation-possible)]*
WARNING
 This translation need to be updated. 
WARNING

Design Möglichkeiten für Beziehungen (Verknüpfungen oder Pfeile)

Linienstil

Es ist möglich einen expliziten Stil für Beziehungen (Verknüpfungen oder Pfeile) zu verwenden bold, dashed, dotted, hidden oder plain :

[Angepasst von QA-4181]

Linienfarbe

Linienstärke

[Ref. QA-4949]

Mischung

Ändern der Farbe und des Stils von Beziehungen (Verknüpfungen oder Pfeilen) (Inline-Stil)

Sie können die Farbe oder den Stil einzelner Beziehungen oder Pfeile ändern, indem Sie die folgende Inline-Notation verwenden:

[Siehe ähnliche Funktion bei der Bereitstellung]

Ändern der Farbe und des Stils einer Klasse (Inline-Stil)

Sie können die Farbe oder den Stil einer einzelnen Klasse mit den beiden folgenden Notationen ändern:

Zuerst mit der Hintergrundfarbe (#color), dann mit dem Zeilenstil und der Zeilenfarbe (##[style]color )

[Ref. QA-1487]

Erstes Originalbeispiel:

[Ref. QA-3770]

Pfeile von/zu Klassen Attributen und Methoden

[Ref. QA-3636]

[Ref. QA-5261]

Gruppierung von Vererbungspfeilspitzen

Sie können alle Pfeilspitzen mit Hilfe von skinparam groupInheritance zusammenfassen, mit einem Schwellenwert als Parameter.

GroupInheritance 1 (keine Gruppierung)

Gruppenvererbung 2 (Gruppierung ab 2)

Gruppenvererbung 3 (Gruppierung nur ab 3)

Gruppenvererbung 4 (Gruppierung nur ab 4)

[Ref. QA-3193, und Defekt QA-13532]

Anzeige von JSON-Daten im Klassen- oder Objektdiagramm

Einfaches Beispiel

[Ref. QA-15481]

Ein weiteres Beispiel finden Sie auf der Seite JSON.

Packages and Namespaces Enhancement

[From V1.2023.2+, and V1.2023.5]

[Ref. GH-1352]

Qualified associations

Minimal example

[Ref. QA-16397, GH-1467]

Another example

Change diagram orientation

You can change (whole) diagram orientation with:

Top to bottom (by default)

With Graphviz (layout engine by default)

The main rule is: Nested element first, then simple element.

With Smetana (internal layout engine)

The main rule is the opposite: Simple element first, then nested element.

Left to right

With Graphviz (layout engine by default)

With Smetana (internal layout engine)

Role label to associations

[Ref. GH-2536, GH-2537]