Wikipedia · einfach zusammengefasst · Stand
Klassendiagramm
Ein Klassendiagramm ist ein Strukturdiagramm der Unified Modeling Language (UML) zur grafischen Darstellung (Modellierung) von Klassen, Schnittstellen sowie …
Inhalt6 Abschnitte
Grundidee
Ein Klassendiagramm ist ein Strukturdiagramm der Unified Modeling Language (UML). Es stellt grafisch dar, welche Klassen und Schnittstellen es in einem System gibt und wie sie miteinander verbunden sind. Eine Klasse ist in der Objektorientierung ein abstrakter Oberbegriff für gemeinsame Struktur und gemeinsames Verhalten von Objekten. Sie hilft also, einzelne Objekte zu verallgemeinern und ein abgegrenztes System in Analyse und Entwurf zu modellieren.
Klassendiagramme werden seit den 1990er Jahren meistens in UML-Notation dargestellt. Die UML ist eine Modellierungssprache für Software und andere Systeme; das Klassendiagramm ist eine ihrer 14 Diagrammarten.
Klassen, Attribute und Operationen
Eine Klasse wird in UML als Rechteck gezeichnet. In der einfachsten Form enthält es nur den fett gedruckten Klassennamen. Häufig wird das Rechteck in Bereiche gegliedert: Klassenname, Attribute oder Eigenschaften sowie Methoden oder Operationen. Diese Bereiche werden durch horizontale Linien getrennt. Wenn keine Attribute oder Operationen angegeben sind, kann die unterste Linie entfallen. Oberhalb des Klassennamens können Schlüsselwörter stehen; unterhalb können Eigenschaften wie {abstrakt} stehen.
Attribute beschreiben Daten oder Eigenschaften einer Klasse. Ihre Spezifikation lautet: [Sichtbarkeit] [/] name [: Typ] [ Multiplizität ] [= Vorgabewert] [{eigenschaftswert*}]. Nur der Attributname ist zwingend und muss innerhalb einer Klasse eindeutig sein. Klassenattribute werden unterstrichen.
Operationen beschreiben Verhalten einer Klasse. Ihre Spezifikation lautet: [Sichtbarkeit] name [({Parameter})] [: Rückgabetyp] [{eigenschaftswert*}]. Ein Parameter wird so angegeben: [Übergaberichtung] name : Typ [ Multiplizität ] [= Vorgabewert] [{eigenschaftswert*}]. Den Pseudotyp void gibt es in UML nicht; wenn kein Rückgabewert vorliegt, wird der Rückgabetyp weggelassen.
Die Sichtbarkeit wird mit Zeichen angegeben: + bedeutet public, also unbeschränkter Zugriff; # bedeutet protected, also Zugriff durch die Klasse und ihre Unterklassen; − bedeutet private, also nur Zugriff durch die Klasse selbst; ~ bedeutet package, also Sichtbarkeit innerhalb des Pakets. Mögliche Eigenschaften sind ordered, redefines <Operationsname> und read-only. Übergaberichtungen sind in, out und inout. Eine abstrakte Klasse ist eine Klasse, von der keine Instanz angelegt werden kann; sie wird durch {abstract} oder kursiven Klassennamen gekennzeichnet. Eine aktive Klasse wird mit doppeltem linken und rechten Rand gezeichnet. Klassenschablonen können Vorlagenparameter in einem gestrichelten Rechteck an der rechten oberen Ecke zeigen.
Schnittstellen
Eine Schnittstelle wird ähnlich wie eine Klasse als Rechteck dargestellt, aber mit dem Schlüsselwort <<interface>> gekennzeichnet. Schnittstellen legen fest, welche Leistungen oder Operationen angeboten werden, ohne selbst wie eine normale Klasse als vollständige Implementierung verstanden zu werden. Seit UML 2 können Schnittstellen auch Attribute besitzen.
Eine angebotene Schnittstelle kann außerdem über eine Schnittstellenrealisierungsbeziehung dargestellt werden. Damit wird gezeigt, dass eine Klasse eine bestimmte Schnittstelle bereitstellt oder verwirklicht.
Wichtige Beziehungen
Eine Generalisierung ist eine gerichtete Beziehung zwischen einer allgemeineren und einer spezielleren Klasse. Exemplare der spezielleren Klasse sind auch Exemplare der allgemeineren Klasse. Die speziellere Klasse verfügt implizit über alle Struktur- und Verhaltensmerkmale der allgemeineren Klasse; man sagt, sie erbt diese Merkmale oder leitet sie ab. Grafisch ist die Generalisierung eine durchgezogene Linie mit geschlossener, nicht ausgefüllter Pfeilspitze am Ende der allgemeineren Klasse. In vielen objektorientierten Programmiersprachen entspricht das der Vererbung, wobei der Pfeil auf die Oberklasse zeigt.
Eine Assoziation beschreibt eine Beziehung zwischen zwei oder mehr Klassen. An ihren Enden stehen häufig Multiplizitäten. Diese geben an, wie viele Objekte einer Klasse zu wie vielen Objekten der anderen Klasse in Beziehung stehen. Beispiele sind binäre Assoziationen zwischen zwei Klassen oder reflexive Assoziationen, bei denen eine Klasse mit sich selbst in Beziehung steht.
Aggregation und Komposition
Aggregation und Komposition sind spezielle Assoziationen für Beziehungen zwischen einem Ganzen und seinen Teilen. Der Artikel markiert diesen Abschnitt als grundsätzlich überarbeitungsbedürftig; deshalb sollten die dortigen Details mit Vorsicht als Quelle verwendet werden. Beide Beziehungen drücken eine Art „besteht aus“-Zusammenhang aus. Die Komposition ist dabei eine stärkere Form der Aggregation.
In der grafischen Darstellung steht bei einer Komposition am Ende des Ganzen eine ausgefüllte Raute. Dort hat das Ganze die Multiplizität 1 oder 1..1. Bei einer Aggregation steht eine nicht ausgefüllte Raute; im Artikel wird dafür eine Kardinalität von 0..* genannt. Der entscheidende Unterschied ist die Existenzabhängigkeit: Bei Komposition können die Teile nicht ohne das Ganze existieren. Bei Aggregation können die Teile auch unabhängig vom Ganzen bestehen.
Als Beispiel nennt der Artikel: Ein Raum kann nicht ohne Gebäude existieren, daher ist Gebäude–Raum eine Komposition. Ein Student kann ohne Vorlesung existieren, daher ist Vorlesung–Student eine Aggregation. Das Ganze darf zusätzliche Beziehungen zu anderen Klassen oder weitere eigene Attribute besitzen; es muss nicht ausschließlich aus Teilen einer einzigen Klasse bestehen.
Formale Sicht und Beispiel
Die formale Semantik beschreibt ein Klassendiagramm mengentheoretisch. Nach Rumbaugh, Jacobson und Booch ist eine Konfiguration oder ein snapshot σ eines UML-Klassendiagramms eine Menge von Objekten der im Diagramm vorhandenen Klassen. Eine Konfiguration ist konsistent, wenn alle angegebenen Einschränkungen eingehalten werden, zum Beispiel Multiplizitäten oder OCL Constraints.
Eine Klasse mit Namen cname wird in einer Konfiguration als Menge ihrer Objekte beschrieben: σ(cname) ist eine Menge, die auch leer sein darf. Ein Attribut attribn vom Typ typn einer Klasse cname wird als partielle Funktion von σ(cname) in σ(typn) verstanden, weil nicht initialisierte Attribute undefiniert sein können. Klassenattribute müssen zusätzlich für alle Objekte einer Klasse auf dasselbe Objekt des Attributtyps abbilden. Bei einer Attributmultiplizität mit Intervall I gilt für jedes a ∈ σ(cname), dass die Anzahl der zugeordneten b-Werte in I liegt. Für Unterklassen gilt: Wenn cname1 Unterklasse von cname ist, dann σ(cname1) ⊆ σ(cname).
Eine Assoziation r zwischen cname1 und cname2 wird als Relation σ(r): σ(cname1) × σ(cname2) interpretiert. Multiplizitäten werden in beiden Richtungen behandelt. In dieser formalen Betrachtung wird nicht zwischen normalen Assoziationen und Spezialformen wie Aggregation oder Komposition unterschieden. Operationen lösen im Allgemeinen einen Übergang von einer Konfiguration zu einer anderen aus; nicht-deterministische Operationen können mehrere Nachfolge-Konfigurationen haben. Query-Operationen haben keine Seiteneffekte und führen daher zu keinem Zustandsübergang. Das Beispieldiagramm des Artikels zeigt ein Klassendiagramm mit fünf Klassen, zwei Generalisierungen und drei Assoziationen.