UML Klassendiagramm
TODO:
Was ist ein Klassendiagramm?
Ein Klassendiagramm bildet ein Kernstück der Unified Modeling Language (UML). Zudem beruht dieses Diagramm auf den Prinzipien der Objektorientierung, wobei der Diagrammtyp vielseitig Anwendung findet.
Beispielsweise wird dieses Modell in der Analysephase als Domainmodell verwendet, um ein reales Abbild zu erstellen. In der Designphase wird mit diesem Modell eine eine Software modelliert, wobei in der Implementierungsphase aus dem Modell ein Code generiert wird.
Wozu wird es benötigt?
Welche Elemente gibt es? Erkläre dies so detailliert und anschaulich wie möglich
Klassenmodelle unterteilen sich in folgende Komponenten:
- Klassen
- Schnittstellen
- Generalisierung
- Assoziation
- Komposition
- Aggregation

Klassen
Klassen werden in UML durch Rechtecke dargestellt, welche ebenfalls den Namen der Klassen innerhalb des Rechtecks geschrieben haben. Zudem kann eine Klasse auch Operationen (Funktionen) und / oder Attribute (Eigenschaften/Variablen) haben. Zusätzlich können über dem Klassennamen bestimmte Schlüsselwörter wie "{abstrakt}" über dem Namen der Klasse tragen. Außerdem besitzen die Operationen und Attribute der Klassen bestimmte Sichtbarkeiten, welche im folgenden erklärt werden:
- public oder auch +
Bei einer public oder auch öffentlichen Sichtbarkeit wird keine Beschränkung über die Funktionen oder Variablen vergeben. Somit können auf diese Komponenten zu jeder Stelle im Projekt zugegriffen werden.
- protected oder auch #
Wenn eine Klasse eine protected Sichtbarkeit besitzt, kann auf die Operationen oder Attribute in der Klasse mit dieser Sichtbarkeit zugegriffen werden. Zudem ist es auch möglich, auf die gleichen Funktionen oder Variablen zuzugreifen, wenn die Klassen von einer protected Klasse erben.
- private oder auch −
Wenn eine Klasse eine private Sichtbarkeit aufweist, können die Operationen und Attribute nur in der Klasse mit dieser Sichtbarkeit gesehen (aufgerufen) werden.
- package oder auch ~
Bei einer Klasse mit einer package Sichtbarkeit sind die Funktionen und Variablen innerhalb des gleichen Package aufrufbar.

Schnittstellen
Eine Schnittstelle wird nahezu gleich wie eine Klasse dargestellt und zwar mit einem Rechteck. Der Unterschied ist aber, dass bei einer Schnittstelle das Rechteck mit dem Schlüsselwort "interface" gekennzeichnet werden.

Generalisierung
Durch eine Generalisierung "erben" speziellere Klassen von generelleren Klassen. Dadurch werden bestimmte Merkmale von der generellen Klassen an die spezialisierte Klasse "vererbt". Die Pfeilspitze der Generalisierung zeigt auf die Oberklasse (Klasse von, welcher geerbt wird).
Assoziantion
Eine Assoziation bezeichnet eine Beziehung zwischen zwei oder mehreren Klassen, wobei die häufigsten Verbindungen zwischen genau zwei Klassen auftreffen. Es gibt folgende zwei Arten von Assoziationen:
- n-äre Assoziation
In folgenden Bild sieht man eine Binäre Assoziation. (Binär, weil zwei Klassen miteinander verbunden wurden)

- reflexive Assoziation
Im hier dargestellten Bild sieht man eine reflexive Assoziation, welche auf sich selbst verweist.

Da Assoziationen durch Linien dargestellt werden, müssen diese durch ein Assoziationsende gekennzeichnet werden. Diese Assoziationsenden können folgende Merkmale aufweisen:
- Sie können eine Multiplizität besitzen. Diese gibt Informationen über das Beziehungsverhältnis zweier Klassen. Diese Zahlen befinden sich nur im positiven und ganzzahligen Bereich, wobei der Beginn bei der Zahl 0 liegt.
- Multiplizitäten werden im folgenden Format angegeben:
untereSchranke..obereSchranke
- Bei * oder auch 0..* wird die untereSchranke als 0 und die obereSchranke als unendlich angenommen.
- Beide Schranken dürfen nicht 0 oder unbeschränkt sein. Falls beide Grenzen trotzdem gleich groß sind, wird nur die obereSchranke angegeben.
- Bei einer Multiplizität von 0..1 wird das Element als optional bezeichnet.
- Wenn die obereSchranke über dem Wert 1 liegt, wird das Element als mehrwertiges Element bezeichnet, da mehrere Wert annehmbar sind.
- Sie können Namen besitzen.
- Sie können eine Sichtbarkeit aufweisen.
- Es kann spezifiziert werden, ob das Assoziationsende "ordered" und / oder unique ist.
Zudem Assoziationsende kommen oft Multiplizitäten hinzu, welche die Beziehung zwischen den zwei Instanzen regelt. Im folgenden werden auf zwei Arten der Assoziationen genauer eingegangen.
Komposition und Aggregation
Um Beziehungen mit Ganzen und Teilen darzustellen werden die Aggregation und die Komposition verwendet.

Die graphische Darstellung einer Komposition ist eine Linie mit einer ausgefüllten Raute, welche mit der Kardinalität 1 beschriftet wird und mit dem Ganzen Teil der Beziehungspartner verbunden ist. Bei einer Komposition können die Teile nicht ohne das Ganze existieren. Das bedeutet, dass das Teil Element existenziell abhängig von Ganz Element ist.
Die graphische Darstellung einer Aggregation ist eine Linie mit einer nicht ausgefüllten Raute, welche die Kardinalität 0..* besitzt und mit dem Ganzen Teil verbunden ist. Die Elemente in einer Aggregation besitzen keine Exisitenzabhängigkeit, da die Teil Elemente auch ohne die Ganz Elemente bestehen können.
Die Assoziationsarten werden prinzipiell mittels der Kardinalität unterschieden. Zudem sind die Teil Elemente Bestandteil genau eines Ganz Elementes, da sie NIE zu mehrere Ganz Elementen gehören.
Stelle in einem anschaulichen Beispiel ein Klassendiagramm Code gegenüber
Diese Umsetzung erfolgte mit der Programmiersprache JAVA.

Quellen:
https://de.wikipedia.org/wiki/Klassendiagramm#Notation_in_der_Unified_Modeling_Language