Skip to content

UML-Diagramme

Die Darstellung in UML-Diagrammen und relation von Klassen zueinander.

UML (Unified Modeling Language) ist eine visuelle Modellierungssprache, um Strukturen und Abläufe in objektorientieren Umgebungen darzustellen.

Eine einfache Java-Klasse sieht wie folgt aus:

class Duck {
private int ducklings = 0;
public void quack() {
System.out.println("Quack!");
}
public int getDucklings() {
return ducklings;
}
public void setDucklings(int newCount) {
ducklings = newCount;
}
}

Das dazugehörige Klassendiagramm sieht wie folgt aus:

Diagram

Ein UML-Klassendiagramm enthält immer alle Felder und Methoden, aber nicht ihre Implementationen. Sichtbarkeit wird duch die Symbole +,#, und - (respektive public, private, und protected) modelliert.

UML-Klassendiagramme können auch die Vererbung zwischen Klassen darstellen. In der Informatik ist die Vererbung auch als ist-Beziehung bekannt (da ein Objekt einer abgeleiteten Klasse immer auch ein Objekt der Superklasse/Oberklasse ist).

Diese werden durch Pfeile zwischen einzelnen Klassen dargestellt. Die Klasse, welche über einer anderen steht, ist hierbei immer die Oberklasse.

abstract class Quackable {
public void quack() {
System.out.println("Quack!");
}
}
class Duck extends Quackable {
// ...
}

Die oberen Klassen könnten folgenderweise dargestellt werden:

Diagram

Vererbte Methoden müssen hierbei nicht wieder dargestellt werden. Die Oberklasse ist immer über der Unterklasse. Von der Unterklasse zeigt ein Pfeil (Dreiecksspitze) in die Oberklasse rein. Die Beschreibung (extends) ist nicht nötig, kann aber die Art der Vererbung besser abbilden.

Die Relation kann hier beidseitig beschrieben werden: Quackable ist eine Generalisierung von Duck. Duck ist eine Spezialisierung von Quackable.

Alle Vererbungen/Spezialisierungen haben eine muss/kann Optionalität und eine 1:1 Kardinalität, weswegen auf diese Angaben typischerweise verzichtet wird.

Klassen können eine bestimmte Relation zueinander haben. UML erlaubt es uns auch, diese zu modellieren.

Assoziationen beschreiben die Abhängigkeiten zweier Klassen. Es gibt gerichtete (unidirektionale) und ungerichtete (bidirektionale) Assoziationen. Gerichtete Assoziationen werden grafisch mit Pfeilen, während ungerichtete Assoziationen mit Linien dargestellt werden. In der objektorientierten Programmierung typischerweise mit gerichteten Assoziationen gearbeitet.

Ungerichtete Assoziation

Diagram

Gerichtete Assoziation

Diagram

Es gibt zudem rekursive Assoziationen, bei welchen beide beteiligte Klassen gleich sind. Zum Beispiel kommt dies typischerweise bei Baumstrukturen vor:

Diagram

Aggregation ist eine spezielle Assoziation zwischen zwei Klassen, bei welcher eine Klasse die andere enthält. Wörtlich lässt sich diese als “ist Teil von” oder “besteht aus” darstellen.

In UML-Diagrammen wird zwischen den beiden relevanten Klassen eine Linie gemalt, welche bei dem “Behälter” eine Raute enthält.

Ein beliebtes Beispiel ist eine Liste. Listen enthalten mehrere Objekte einer anderen Klasse.

Diagram

Dieses Beispiel zeigt auch gut, dass Beziehungen nicht immer in beide Richtungen gehen müssen. Die Elemente der Liste “wissen” nichts davon, dass sie in der Liste enthalten sind.

Komposition ist eine Sonderform der Aggregation. Bei der Komposition ist der Teil von der Existenz des Ganzen abhängig. Klare Unterschiede zwischen Aggregationen werden jedoch oft schwer erkannt, weswegen auf den Begriff der Komposition typischerweise verzichtet wird.

Generalisierung und Vererbung sind auch Beziehungstypen. Diese sind, habe ich allerdings bereits in Vererbung angesprochen.