Helmichs Informatik-Lexikon

Klassendiagramme

"Klassendiagramme beschreiben die vorhandenen Klassen mit ihren Attributen und Methoden sowie die Beziehungen der Klassen untereinander."

Das ist die Einleitung des entsprechenden Absatztes aus den offiziellen "Materialien zu den zentralen Abiturprüfungen im Fach Informatik ab 2012".

Klassen

Eine Klasse wird grundsätzlich durch ein Rechteck symbolisiert, in dem ganz oben der Name der Klasse steht.

Zusäztlich können die Attribute der Klasse angegeben werden und die Methoden. Aber man muss nicht alle Attribute und Methoden angeben, sondern nur diejenigen, die für das jeweilige Vorhaben relevant sind.

Klassendiagramm der Klasse Hotel aus einer Abituraufgabe von 2015

Hier sehen wir ein solches Klassendiagramm aus einer Abituraufgabe von 2015 (NRW). Die Klasse heißt "Hotel", von den Attributen sind die vier wichtigsten angegeben. An dem Minuszeichen vor dem Attributnamen erkennt man, dass es sich um private Attribute handelt. Öffentliche (public) Attribute werden durch ein Plus-Zeichen gekennzeichnet.

Im Gegensatz zur Java-Syntax wird erst der Name des Attributes angegeben, dann der Datentyp. Bei Klassendiagrammen gibt es nur vier Datentypen: Text, Zahl, Wahrheitswert und Datenansammlung.

private String name;

Deklaration des Attributs in der Sprache Java

-name: Text

Angabe des Attributs in einem Klassendiagramm

Bei den Methoden werden in der Regel zuerst die Konstruktoren aufgelistet. Die Parameter werden in der gleichen Syntax angegeben wie die Attribute: Bezeichnung : Datentyp.

Wie man an den drei Pünktchen erkennen kann, wurden auch nicht alle Methoden in dem Klassendiagramm aufgezählt, sondern nur die, die für die Aufgabenstellung relevant sind.

Abstrakte Klassen

Im Kopf des Klassendiagramms wird der Hinweis (abstract) vermerkt, und die abstrakten Methoden werden kursiv geschrieben bzw. bei handschriftlicher Darstellung mit einer Wellenlinie unterschlängelt.

Beziehungen zwischen Klassen

Assoziation

Unter einer Assoziation versteht man eine gerichtete Beziehung zwischen zwei Klassen. Das wohl bekannteste Beispiel für eine solche Assoziation ist die HAT-Beziehung. Dieser Begriff taucht in den Richtlinien / Vorgaben / Materialien des Landes NRW allerdings so gut wie nicht mehr auf, auch der verwandte Begriff KENNT-Beziehung scheint nicht mehr aktuell zu sein. Es gab auch immer große Probleme, wenn man diese beiden Begriffe auseinanderhalten wollte, daher ist die gemeinsame Bezeichnung "Assoziation" wohl sinnvoller.

Eine Assoziation (HAT-/KENNT-Beziehung) wird durch einen Pfeil (mit einer offenen Spitze) zwischen den beiden Klassen dargestellt. Der Pfeil geht von der "übergeordneten" Klasse zu der "untergeordneten" Klasse. Wenn also die Klasse Schachbrett 64 Objekte der Klasse Feld HAT, so zeigt der Pfeil von Schachbrett zu Feld. Man kann dann an die Pfeilspitze noch die Anzahl der assoziierten Objekte schreiben, wenn diese bereits bekannt ist, beim Schachbrett also 64. Diese Zahl wird in der Fachsprache als Multiplizität bezeichnet.

Steht die Zahl der assoziierten Objekte bei dem Entwurf des Klassendiagramms noch nicht fest, so gelten folgende Regeln:

  • 0..1: kein oder ein assoziiertes Objekt
  • 0..*: beliebig viele assoziierte Objekte
  • 1..*: mindestens ein assoziiertes Objekt
Vererbung

Die zweite Möglichkeit, nach der zwei Klassen eine Beziehung bilden können, ist die Vererbung. Bei der Vererbung wird aus einer bereits bestehenden Klasse wie zum Beispiel Tier eine spezialisierte Klasse abgeleitet, beispielsweise Wirbeltier. Die Tochterklasse erbt dann alle Attribute und Methoden der Mutterklasse. De facto IST die Tochterklasse die Mutterklasse; ein Wirbeltier IST ein Tier, allerdings mit zusätzlichen Eigenschaften. Die Tochterklasse kann zusätzliche Attribute haben, und sie kann zusätzliche Methoden haben. Daher ist auch der Name IST-Beziehung für eine solche Vererbungs-Beziehung gebräuchlich.

Eine IST-Beziehung wird durch einen Pfeil (mit einer dreieckigen geschlossenen Spitze) zwischen den beiden Klassen dargestellt. Der Pfeil geht von der abgeleiteten Tochterklasse zur Mutterklasse, in unserem Beispiel also von Wirbeltier zu Tier.

Hier ein Beispiel aus den "Materialien zu den zentralen Abiturprüfungen im Fach Informatik ab 2012" :

IST-Beziehung zwischen zwei Klassen im UML-Diagramm

Die Klasse Klausur wurde aus der Klasse Leistungsueberpruefung abgeleitet.

Entwurfs- und Implementationsdiagramme

Entwurfsdiagramm

Das Entwurfsdiagramm ist die einfachste Art, ein (geplantes) Programmierprojekt graphisch darzustellen. Es werden nur die beteiligen Klassen (als Kästen) sowie die Assoziationen und Vererbungsbeziehungen zwischen den Klassen gezeichnet.

Entwurfsdiagramm aus den offiziellen Materialien

Hier sehen wir das Beispiel aus den offiziellen Materialien des Landes NRW. Auf dem Schreibtisch eines Lehrers, dargestellt durch die Klasse Schreibtisch, liegen zwei Stapel von Klausurheften, ei linker Heftstapel und ein rechter Heftstapel. Offensichtlich liegen links die bereits korrigierten Klausuren, rechts die noch nicht korrigierten. In der Mitte liegt dann das aktuelle Heft, das gerade korrigiert wird. Es handelt sich also um drei Assoziationen, die aber durch einen einzigen Pfeil repräsentiert werden. Interessant ist hier, dass die Bezeichungen "linkerHeftstapel", "rechterHeftstapel" und "aktuellesHeft" an dem Pfeil stehen. An sich handelt es sich um drei Attribute, die eigentlich in der zweiten Abteilung des Klassendiagramms für Schreibtisch stehen müssten. Aber so ist es sogar etwas besser, denn man weiß sofort, dass die drei Attribute HAT-Beziehungen sind, und die Zahlen hinter den Bezeichnern geben sogar an, wie groß die Heftstapel sein können (nämlich leer oder aus einem, zweien oder beliebig vielen Heften bestehend). Der "Stapel" mit dem aktuellen Heft ist entweder leer (0) oder besteht aus einem einzigen Heft (1).

Die Heftstapel bestehen aus Objekten der Klasse Klausur, und diese Klasse ist wiederum eine Tochterklasse von Leistungsueberpruefung.

Implementationsdiagramm

Achten Sie darauf, dass das Entwurfsdiagramm keinen einzigen Hinweis auf eine mögliche Implementierung des Projektes enthält. Daher ist ein Entwurfsdiagramm universell gültig für alle Programmiersprachen, zumindest für alle objektorientierten Programmiersprachen, die Assoziationen und Vererbung erlauben.

Beispielsweise wurde für das Attribut notenSpiegel der Klasse Schreibtisch der Datentyp Datensammlung<Zahl> gewählt. Damit wurde nur festgelegt, dass man irgendeinen Datentypen implementieren muss, in dem man viele Zahlen speichern kann, zum Beispiel einen Array, eine ArrayList, einen Stack oder etwas Ähnliches.

Bei der Implementation muss man sich jetzt konkret entscheiden, welche Art von Datensammlung man wählt. Speichert man die Noten in einem Array aus int-Zahlen, oder wählt man eine ArrayList oder einen anderen Datentyp?

Schauen wir uns dazu das Implementationsdiagramm aus den offiziellen Materialien an:

Implementationsdiagramm aus den offziellen Materialien

Hier wurde für das Attribut notenSpiegel ein Array aus int-Elementen gewählt, und das Attribut anzahlKlausuren wurde als einfache int-Zahl festgelegt. Damit kann jemand, der das Ganze in Java programmieren soll, schon etwas anfangen:

public class Schreibtisch

{ int[] notenSpiegel; int anzahlKlausuren; ... }

Was im Implementationsdiagramm noch nicht festgelegt wurde, ist die Anzahl der Arrayelemente für den Notenspiegel.

Der Begriff "Implementationsdiagramm" verspricht auch mehr, als er hält. Eine Implementation der Methoden wird nämlich nicht vorgegeben, sondern nur eine etwas stärkere Konkretisierung des Entwurfsdiagramms, vor allem was die Datentypen angeht. So wird hier vom Programmierer verlangt, dass er die beiden Heftstapel als Stack anlegt, als Stapel von Klausur-Objekten.

Insgesamt findet man in dem Beispiel-Implementationsdiagramm deutlich mehr Methoden als in dem Entwurfsdiagramm, und die Methoden besitzen konkrete Parameter.