Grundlegende Komponenten eines Klassendiagramms
Je nach Kontext können Klassen in einem Klassendiagramm die Hauptobjekte, Interaktionen innerhalb der Anwendung oder die zu programmierenden Klassen repräsentieren. Um die Frage „Was ist ein Klassendiagramm in der UML?“ zu beantworten, sollten Sie zunächst dessen grundlegenden Aufbau verstehen.
- Klassen: Eine Vorlage zur Erstellung von Objekten und zur Implementierung von Verhalten in einem System. In der UML repräsentiert eine Klasse ein Objekt oder eine Reihe von Objekten, die eine gemeinsame Struktur und ein gemeinsames Verhalten aufweisen. Sie werden durch ein Rechteck dargestellt, das Zeilen für den Klassennamen, die Attribute sowie die Operationen enthält. Wenn Sie eine Klasse in einem Klassendiagramm zeichnen, müssen Sie lediglich die oberste Zeile ausfüllen – die übrigen Zeilen sind optional, falls Sie detailliertere Informationen bereitstellen möchten.
- Signale: Symbole, die eine asynchrone Einwegkommunikation zwischen aktiven Objekten darstellen.
- Datentypen: Klassifikatoren, die Datenwerte definieren. Datentypen können sowohl primitive Typen als auch Enumerationen (Aufzählungen) modellieren.
- Pakete: Formen, die dafür konzipiert sind, zusammengehörige Klassifikatoren in einem Diagramm zu organisieren. Sie werden durch ein großes Rechteck mit einer Registerkarte symbolisiert.
- Schnittstellen (Interfaces): Eine Sammlung von Operationssignaturen und/oder Attributdefinitionen, die ein zusammenhängendes Verhalten definieren. Schnittstellen ähneln Klassen, mit dem Unterschied, dass eine Klasse eine Instanz ihres Typs aufweisen kann, während eine Schnittstelle mindestens eine implementierende Klasse erfordert.
- Enumerationen (Aufzählungen): Darstellungen von benutzerdefinierten Datentypen. Eine Enumeration umfasst Gruppen von Bezeichnern, welche die Werte der Enumeration repräsentieren.
- Objekte: Instanzen einer Klasse oder mehrerer Klassen. Objekte können einem Klassendiagramm hinzugefügt werden, um entweder konkrete oder prototypische Instanzen darzustellen.
- Artefakte: Modellelemente, welche die konkreten Entitäten in einem Softwaresystem repräsentieren, wie Dokumente, Datenbanken, ausführbare Dateien, Softwarekomponenten usw.
Abschnitte innerhalb einer Klasse
Die Standardklasse setzt sich aus drei Abschnitten zusammen:
Oberer Abschnitt
Enthält den Namen der Klasse. Dieser Abschnitt ist stets erforderlich, unabhängig davon, ob es sich um den Klassifikator oder ein Objekt handelt. Der Klassenname sollte:
- Mit einem Großbuchstaben beginnen.
- In Fettschrift formatiert sein.
- Im oberen Abschnitt zentriert sein.
- Aussagekräftig sein.
Mittlerer Abschnitt
Enthält die Attribute der Klasse. Nutzen Sie diesen Abschnitt, um die Eigenschaften der Klasse zu beschreiben. Dies ist nur erforderlich, wenn eine spezifische Instanz einer Klasse beschrieben wird.
Unterer Abschnitt
Beinhaltet die Klassenoperationen (Methoden). Jede Operation wird im Listenformat auf einer eigenen Zeile aufgeführt. Die Operationen beschreiben, wie eine Klasse mit Daten interagiert. Der Text in den beiden unteren Abschnitten ist in der Regel linksbündig ausgerichtet und beginnt mit einem Kleinbuchstaben.
Modifikatoren für den Member-Zugriff
Alle Klassen verfügen je nach Zugriffsmodifikator (Sichtbarkeit) über unterschiedliche Zugriffsebenen. Hier sind die Zugriffsebenen mit den entsprechenden Symbolen aufgeführt:
- Public (+)
- Private (-)
- Protected (#)
- Package (~)
- Abgeleitet (/)
- Statisch (unterstrichen)
Gültigkeitsbereiche von Membern (Member Scopes)
Es gibt zwei Gültigkeitsbereiche für Member: Klassifikatoren und Instanzen.
Klassifikatoren werden häufig als statisch herangezogen, was bedeutet, dass die Attributwerte in allen Instanzen identisch bleiben und der Aufruf einer Methode den Zustand der Instanz nicht beeinflusst. Im Gegensatz dazu enthalten Instanzen Methoden, die den Zustand der Instanz verändern können, sowie Attributwerte, die von Instanz zu Instanz variieren können. Um einen Klassifikator zu kennzeichnen, unterstreichen Sie einfach dessen Namen; lassen Sie den Text normal, um eine Instanz anzuzeigen.
Interaktionen
Der Begriff „Interaktionen“ bezieht sich auf die verschiedenen Beziehungen und Verknüpfungen, die in Klassen- und Objektdiagrammen existieren können. Zu den häufigsten Interaktionen gehören:
Vererbung: Der Prozess, bei dem eine Unter- oder Kindklasse die Funktionalität einer Ober- oder Elternklasse übernimmt, auch bekannt als Generalisierung. Sie wird durch eine gerade, durchgehende Verbindungslinie mit einer geschlossenen Pfeilspitze symbolisiert, die in Richtung der Oberklasse zeigt.

In diesem Beispiel würde das Objekt „Auto“ sämtliche Attribute (Geschwindigkeit, Anzahl der Passagiere, Kraftstoff) und Methoden (go(), stop(), changeDirection()) der übergeordneten Klasse („Fahrzeug“) erben, zusätzlich zu den spezifischen Attributen (Modelltyp, Anzahl der Türen, Automobilhersteller) und Methoden seiner eigenen Klasse (Radio(), Scheibenwischer(), Klima/Heizung()). Die Vererbung wird in einem Klassendiagramm durch eine durchgehende Linie mit einem geschlossenen, hohlen Pfeil dargestellt.
Bidirektionale Assoziation: Die Standardbeziehung zwischen zwei Klassen. Beide Klassen wissen voneinander und von ihrer gegenseitigen Beziehung. Diese Assoziation wird durch eine gerade Linie zwischen zwei Klassen dargestellt.

Im obigen Beispiel stehen die Klassen „Car“ (Auto) und „RoadTrip“ (Autoreise) in einer wechselseitigen Beziehung. An einem Ende der Linie übernimmt die Klasse „Car“ die Assoziation „assignedCar“ mit dem Multiplizitätswert 0..1. Wenn also die Instanz von „RoadTrip“ existiert, kann ihr entweder eine Instanz von „Car“ oder gar kein Auto zugeordnet sein. In diesem Fall ist eine separate Klasse „Caravan“ mit einem Multiplizitätswert von 0..* erforderlich, um zu demonstrieren, dass mit einem „RoadTrip“ mehrere Instanzen von „Car“ verknüpft sein können. Da eine einzelne „Car“-Instanz mehrere „getRoadTrip“-Assoziationen aufweisen kann – mit anderen Worten: Ein Auto kann an mehreren Roadtrips teilnehmen –, wird der Multiplizitätswert auf 0..* festgelegt.
Unidirektionale Assoziation: Eine etwas seltener vorkommende Beziehung zwischen zwei Klassen. Eine Klasse hat Kenntnis von der anderen und interagiert mit ihr. Die unidirektionale Assoziation wird mit einer geraden Verbindungslinie modelliert, deren offene Pfeilspitze von der kennenden Klasse auf die bekannte Klasse zeigt.

Wenn Sie beispielsweise auf Ihrer Autoreise durch Arizona in eine Radarkontrolle geraten, zeichnet eine Geschwindigkeitskamera Ihre Fahrt auf, ohne dass Sie davon wissen, bis Sie eine Benachrichtigung per Post erhalten. Dies ist in der Abbildung nicht dargestellt, aber in diesem Fall würde der Multiplizitätswert je nachdem, wie oft Sie an der Radarkamera vorbeifahren, 0..* betragen.