Klassen- und Implementationsdiagramm
- Klassendiagramme sind wesentlicher Bestandteil der UML (=Unified Modeling Language).
- Implementationsdiagramme gibt es nur in Nordrhein-Westfalen!
Vorgaben für das Zentralabitur
Hier die offiziellen Erläuterungen für Klassen- und Implementationsdiagramme:
Klassen- und Implementationsdiagramme (PDF)
Attribute und Methoden im Klassendiagramm
Rechts ein einfaches Klassendiagramm für die Klasse Buch: Die Klasse Buch ist ein bloßer Informationsbehälter, d.h. die Klasse verfügt nur über get- und set-Methoden und nicht über eine eigene Logik.
Aufbau eines Klassendiagramms
Klassendiagramme haben immer drei Zeilen:
- Zeile: Der Name der Klasse
- Zeile: die Attribute der Klasse
- Zeile: die Methoden der Klasse
- Dabei wird als erstes der Konstruktor aufgeführt.
Syntax innerhalb des Klassendiagramms
Klassendiagramme haben eine eigene Syntax, die (leider!) von der Java-Syntax abweicht:
- + bedeutet
public
- - bedeutet
private
- Attribute:
- VOR dem Doppelpunkt: "+" bzw. "-" und der Attribut-Name
- NACH dem Doppelpunkt: Attribut-Typ
- Methoden:
- erst "+" bzw. "-" (für
public
bzw.private
) - Methoden-Name
- Parameter (in Klammern!): VOR dem Doppelpunkt der Parameter-Name, NACH dem Doppelpunkt der Parameter-Typ.
- NACH dem Doppelpunkt: Rückgabe-Typ der Methode
- erst "+" bzw. "-" (für
Java-Implementierung
Das oben gegebene einfache Klassendiagramm wird jetzt in Java übersetzt:
public class Buch{
//Attribute
private String titel;
private int regalNr;
//Konstruktor
public Buch(String pTitel){
titel = pTitel;
}
// get- und set-Methoden
public int getRegalNr() {
return regalNr;
}
public void setRegalNr(int pRegalNr) {
regalNr = pRegalNr;
}
public String getTitel() {
return titel;
}
}
Erstellen von Implementationsdiagrammen: Top-Down-Modellierung
Für das Erstellen von Implementationsdiagrammen gibt es keine festen Regeln, aber eine geeignete Vorgehensweise, die Top-Down-Modellierung:
- Man ermittelt die Klassen, die sich aus dem Sachzusammenhang ergeben.
- Man fängt bei der "obersten" Klasse an, die über allem steht und arbeitet sich immer weiter nach unten durch. Dabei stellt man fest, welche Beziehung zwischen den Klassen besteht.
- Man zeichnet ein Implementationsdiagramm, in dem die Beziehungen zwischen den Klassen festgehalten werden.
- Man zeichnet Klassendiagramme für die einzelnen Klassen, in denen Attribute und Methoden festgehalten werden.
Beispiel
Szenario:
Ein Medienplayer kann die Titel, die man hören möchte, in Wiedergabelisten verwalten. Folgende typische Operationen sollen im Modell enthalten sein:
- Für einen Titel werden der Name, der Interpret und die Länge in Sekunden gespeichert. (Um die Speicherung der Audio-Daten kümmert sich diese Modellierung nicht.)
- Ein Titel kann an einer beliebigen Position der Wiedergabeliste (d. h. am Anfang, am Ende oder an einer Stelle innerhalb der Liste) eingefügt werden. Ebenso kann ein beliebiger Titel aus der Liste gelöscht werden.
- Das Abspielen der Wiedergabeliste beginnt beim ersten Titel. Dann werden alle Titel nacheinander abgespielt. Man kann das Abspielen stoppen. Und man kann wieder an den Anfang der Wiedergabeliste gehen.
- In einem Medienplayer werden beliebig viele Wiedergabelisten verwaltet. Jede Wiedergabeliste hat einen Namen. Der Medienplayer kann immer nur eine aktive Wiedergabeliste haben. Die aktive Liste kann abgespielt werden.
- Im Medienplayer kann man eine Wiedergabeliste auswählen, indem man ihren Namen angibt. Man kann auch neue Wiedergabelisten anlegen, indem man einen Namen angibt. Und man kann die gerade aktive Wiedergabeliste löschen.
- Beim Abspielen einer Wiedergabeliste fragt der Medienplayer immer den nächsten Titel von der aktiven Wiedergabeliste an.
Aufgabe:
Entwerfen Sie ein Implementationsdiagramm. Begründen Sie Ihre Entscheidungen. Begründen Sie auch, ob Sie sich für Stack
, Queue
oder List
entscheiden.
Lösung
Analyse
Bei der Analyse schreibt man formelhaft Begründungen für die Beziehungen der Klassen:
- Aus dem Szenario ergeben sich die Klassen
Medienplayer
,Wiedergabeliste
undTitel
. Medienplayer
ist die "oberste" Klasse und damit der Ausgangspunkt der Modellierung.Medienplayer
hat eine Liste mit Inhaltsobjekten vom TypWiedergabeliste
.List
eignet sich besser alsQueue
oderStack
, weil damit das Auswählen der Wiedergabeliste nach dem Titel einfacher realisiert werden kann.Medienplayer
hat ein AttributaktuelleWiedergabeliste
vom Typ <Wiedergabeliste, in dem die jeweils aktuelle Wiedergabeliste gespeichert wird.WiedergabeListe
kann nicht vonList
erben, weil sie sonst die Methodeconcat(List pList)
zur Verfügung hätte, die im Szenario nicht vorgesehen ist.- Stattdessen:
WiedergabeListe
hat eineList
mit Inhaltsobjekten vom TypTitel
.Queue
oderStack
eignen sich nicht, weil man an beliebigen Stellen einfügen können muss.