Logo Wissenstransfer Gerhard at CichnaDotCom

>> Wissensdatenbank / Objektorientiertes Programmieren

Einführung in die objektorientierte Modellierung

Strukturieren von Problemen mit Klassen

Ein Objekt ist eine abgeschlossene, für sich handlungsfähige Einheit, beispielsweise der Kunde "Hans Meier" oder der Vertrag "P-DFD-23". Bei der objektorientierten Entwicklung werden Objekte aus der physischen (realen) Welt in Objekte der Programmiersprache nachgebildet. Bei dieser digitalen Nachbildung werden aber nur die wichtigsten Eigenschaften wie Name, Vorname, Geburtsdatum oder Geschlecht übernommen. Eigenschaften wie Haarfarbe werden für die Aufgaben des Systems in den meisten Fällen nicht benötigt.

Eine Klasse liefert in der Objektorientierung die Struktur, die zur Bildung eines "digitalen Objekts" erforderlich ist. Auf Basis einer Klasse können beliebig viele Objekte erzeugt werden. Alle aus einer Klasse erzeugten Objekte haben die gleiche Struktur, also dieselben Attribute und Methoden. Aus welchen Klassen ein objektorientiertes System besteht und wie die Struktur der benötigten Klassen aussieht, wird in der Phase "objektorientiertes Design" festgelegt. Ausgangspunkt für das Design sind die ermittelten und spezifizierten Anforderungen.

Bei der objektorientierten Programmierung von IT-Systemen werden (fast) nur Klassen implementiert. Ein objektorientiertes System erzeugt dann bei Bedarf die entsprechenden Objekte, zum Beispiel aus Datenbankeinträgen oder Benutzereingaben. Durch die Beschreibung der Klassen wird gewährleistet, dass sich alle Objekte, die auf Basis dieser Klasse erzeugt werden, gleich verhalten. Alle Objekte einer Klasse haben dieselben Attribute und verfügen über die gleichen Funktionen und Routinen (Methoden). Damit können alle aus einer Klasse erzeugten Objekte von den Funktionen des Systems in gleicher Weise verarbeitet werden.

Die zentralen Aktivitäten bei der Analyse und später beim Design sind das Identifizieren und Beschreiben von Klassen. Obwohl die Sichtweise "Objektorientierung" heißt, stehen eigentlich vielmehr die Klassen im Vordergrund der Betrachtung.

Identifizieren von Klassen

Um bei der Analyse zu bestimmen, was ein System tun soll, und dann darauf aufbauend später beim Design festzulegen, aus welchen Klassen das System bestehen soll, wird in einem ersten Schritt ein Analysemodell des Systems entwickelt:
Aus der Aufgabenstellung beziehungsweise den Anforderungen an das System müssen Kandidaten für Klassen identifiziert und notiert werden.

Die etablierte Vorgehensweise zur Identifikation von Klassen kann wie folgt beschrieben werden:

  1. Alle Hauptwörter (Substantive) der Aufgabenstellung werden als Kandidaten für Klassen markiert.
  2. Dann wird geprüft, ob die markierten Hauptwörter durch weitere Hauptwörter beschrieben werden können oder ob sie Beziehungen oder Abhängigkeiten zu anderen Haupwörtern haben. Trifft eine der beiden Aussagen zu, wird das Hauptwort als Klasse modelliert.
  3. Wird das Hauptwort verwendet, um ein anderes Hauptwort zu detaillieren, wird es als Attribut einer Klasse modelliert.
  4. Alle verbleibenden Wörter, die weder Klasse noch Attribut sind, werden auf Relevanz überprüft und ggf. von der Liste der Kandidaten für Klassen gestrichen.

Klassen werden immer in Form eines Rechtecks dargestellt, der Name der Klasse wird in das Rechteck geschrieben.
Beispiel:
Klassen

Attribute als Eigenschaften von Klassen

Wie bereits beschrieben, bestehen Klassen (und damit auch Objekte) aus Attributen und Methoden. Die Attribute (auch: Eigenschaft von Klassen, engl. property) sind statische Elemente von Klassen. In einem Attribut können konkrete Werte zu dem Objekt gespeichert werden. Attribute dienen ausschließlich zum Speichern von Werten, man kann sie als freie Speicherplätze innerhalb eines Objekts verstehen. Zusammengefasst beschreiben die Werte aller Attribute eines Objekts dessen Zustand. Objekte, die aus einer Klasse erzeugt wurden und deren Attribute exakt die gleichen Werte haben, sind identisch.
Attribute der Klassen

Attribute werden unterhalb des Klassennamens in einem eigenen Rechteck notiert.

Bei der Modellierung von Attributen können u.a. die unten in der Tabelle beschriebenen Eigenschaften festgelegt werden. Von diesen Eigenschaften ist in einem Analysemodell mindestens der Name erforderlich. Die fehlenden Eigenschaften werden im Verlauf des SW-Entwicklungsprozesses festgelegt.

Eigenschaften eines Attributs Beschreibung Beispiel
Name Name des Attributs Vorname
Datentyp Legt fest, wie die Werte zu dem Attribut aussehen, also
ob es z.B. eine Zahl, eine Zeichenkette oder ein Datum ist
Date(Datum)
String (Zeichenkette)
Integer (Ganze Zahl)
Konstante (ja/nein) Legt fest, ob sich der Wert des Attributs ändern darf
oder nicht
Gerundete Kreiszahl Pi: 3,1415
Defaultwert Legt den voreingestellten Wert des Attributs fest 2010-01-01

Methoden als Funktionen von Klassen

Methoden (auch: Funktionen, Operationen) sind dynamische Elemente von Klassen. Sie enthalten Algorithmen, Anweisungen und Abarbeitungsvorschriften, mit denen Werte erstellt, berechnet, verändert und gelöscht werden können. Die Ergebnisse der Methoden können in Attribute der Klasse oder in neu erzeugte Objekte gespeichert werden. Mit Methoden wird das Verhalten von Objekten beschrieben, also was ein Objekt macht.

Bei der Modellierung von Methoden können u.a. die unten in der Tabelle beschriebenen Elemente festgelegt werden. In einem Analysemodell wird mindestens der Name benötigt. Detaillierte Informationen zu Rückgabewert, Parameter und der Funktion der Methode können auch im Laufe des Entwicklungsprozesses Stück für Stück ergänzt werden.

Elemente von Methoden Beschreibung Beispiel
Name Name der Methode getName()
Parameter Benötigte Objekte und Werte, die zur Abarbeitung der
Methode erforderlich sind
(Date geburtsdatum)
(String name, String vorname)
(Integer zahl1, Integer zahl2)
Rückgabewert Angabe des Datentyps des Objektes, in dem das Ergebnis der
Methode gespeichert wird
Date (Datum)
String (Zeichenkette)
Integer (Ganze Zahl)

Wichtig ist in jedem Fall, dass die in den Attributen gespeicherten Werte wieder ausgelesen werden können. Von außen darf auf Attribute nur über Methoden zugegriffen werden und niemals direkt.
Attribute und Methoden der Klassen

Methoden einer Klasse werden in einem zusätzlichen Rechteck unterhalb der Attribute modelliert.

Beziehungen zwischen Klassen

Ein Zusammenspiel verschiedener Klassen ist nur möglich, wenn während der Phasen des Entwicklungsprozesses Beziehungen (auch: Assoziationen) zwischen Klassen definiert werden. Durch die Festlegung von Beziehungen zwischen Klassen ist eine Kooperation zwischen Objekten überhaupt erst möglich.

Typische Beziehungen zwischen Klassen sind in untenstehender Tabelle erläutert:

Beziehungstypen Beschreibung Beispiel
"hat/kennt" Dieser Beziehungstyp drückt aus, dass eine Klasse eine
andere Klasse "hat" oder "kennt".
Ein Versicherungsnehmer hat Kinder.
Ein Vertrag hat Versicherungsbedingungen.
Ein Kalender hat Monate.
Ein Verkäufer kennt seine Kunden.
"besteht aus" Dieser Beziehungstyp drückt aus, dass eine Klasse ein
Bestandteil einer anderen Klasse ist. Er wird genutzt,
wenn eine Klasse ein größeres Konstrukt ist, dessen
Elemente nicht durch einfache Attribute beschrieben
werden können.
Ein Auto besteht aus einem Motor, 4 Rädern, 3 Türen,
1 Getriebe und 2 Sitzen.
Ein Haus besteht aus einem Dach, 23 Fenstern, 2 Türen,
6 Räumen und 1 Treppenhaus.
"ist ein" Dieser Beziehungstyp drückt aus, dass eine Klasse A von
der Art her eine Klasse B ist, aber eine spezifischere
Bedeutung hat und sich ggf. um bestimmte Attribute und Methoden
von Klasse B unterscheidet.
Ein PKW ist ein Auto.
Ein LKW ist ein Auto.
Ein Kunde ist eine Person.
Ein Buch ist ein Artikel.
Ein Igel ist ein Säugetier.

Um neben Klassen, Attributen und Methoden ebenfalls die Beziehungen grafisch darzustellen, werden Linien bzw. Pfeile zwischen den entsprechenden Klassen modelliert.

Darstellung der Beziehung Bedeutung
Beziehung durchgezogene Linie
Durchgezogene Linie, ohne Pfeilspitze und ohne Beschriftung
Vertrag und Adresse stehen in einer nicht näher beschriebenen
Beziehung zueinander.
Beziehung beschriftete Linie
Durchgezogene Linie, Beschriftung der Linie mit einem Namen
für die Beziehung
Vertrag und Adresse sind über eine benannte Assoziation verbunden;
die beiden Klassen sind verbunden durch die Beziehung
"Rechnungsanschrift".
Beziehung Linie mit Pfeil
Durchgezogene Linie mit einer Pfeilspitze, ggf. Benennung der
Beziehung
Durch die Pfeilspitze wird eine Navigationsrichtung vorgegeben:
vom Vertrag zur Adresse. Das bedeutet, dass der Vertrag eine
Adresse kennt und man sich vom Vertrag zur Adresse durchhangeln
kann. Jedoch nicht von der Adresse zum Vertrag: Ein Vertrag kennt
seine Adresse, aber die Adresse weiß nichts von und über
die Existenz des Vertrags.
Beziehung Linie mit Pfeil und Multiplizitäten
An den Enden der Beziehung werden Multiplizitäten modelliert
und damit Aussagen über die Anzahl der assozierten
Objekte gemacht
Ein Vertrag hat genau eine Rechnungsanschrift, eine Adresse kann
jedoch die Rechnungsanschrift zu mindestens 1 aber maximal beliebig
vielen Verträgen sein.

Zu Beziehungen können mit Multiplizitäten (auch: Kardinalitäten) Mengenangaben festgelegt werden. Diese Angaben werden jeweils an das Ende und die Spitze einer Beziehung notiert: Links von ".." steht die Untergrenze und rechts von ".." die Obergrenze der Mengenangaben.

Überblick über mögliche Mengenangaben:

Notation Erklärung Beispiel
0..1 Optionale Assoziation Optionale Assoziation
Zu einem Auto gehören 0..1 Anhänger.
Zu einem Anhänger gehören 0..1 Autos.
1 Obligatorische Assoziation Obligatorische Assoziation
Zu einem Auto gehört genau 1 Fahrer.
Ein Fahrer gehört zu genau 1 Auto.
0..* Optional beliebig Optional beliebig
Ein Student kann 0..* Kurse belegen.
Ein Kurs kann von 1..* Studenten belegt sein.
1..* Beliebig, aber mindestens 1 Beliebig, aber mindestens 1
Ein Tutor kann 1..* Kurse machen.
Ein Kurs wird von genau 1 Tutor durchgeführt.
n..m Mindestens n und maximal m Mindestens n und maximal m
Ein Auto hat mindestens 3 und maximal 4 Türen.
Eine Tür gehört zu genau 1 Auto.
Keine Angabe entspricht 1 (sollte
aber vermieden werden, um
Missverständnisse zu vermeiden)
Ohne Angabe
Ein Auto hat genau 1 Motor.
Ein Motor gehört zu genau 1 Auto.

Unified Modeling Language (UML)

Die Anwendung der Konzepte (Klasse, Objekt, Methode, Attribut) zieht sich durch alle Phasen eines objektorientierten Entwicklungsprozesses. Um die Ergebnisse der Phasen OOA und OOD geeignt zu dokumentieren, werden die identifizierten Klassen und deren Beziehungen in einer standardisierten Modellierungssprache dokumentiert.

Die Unified Modeling Language (kurz: UML) ist eine grafische Modellierungssprache, die etwa zeitgleich mit der Objektorientierung in den frühen 1990er Jahren entwickelt wurde. Die UML umfasst mittlerweile 13 verschiedene Diagrammtypen, mit denen verschiedene Aspekte eines Systems modelliert werden können.
Grundsätzlich lassen sich Diagramme zur Modellierung von Struktur und zur Modellierung von Verhalten unterscheiden. Mit Strukturdiagrammen werden Aufbau, Elemente und Zusammensetzung sowie Schnittstellen von Systemen dargestellt. Vereinfacht gesagt werden Strukturdiagramme eingesetzt, um zu modellieren, woraus ein System besteht. Verhaltensdiagramme hingegen kommen zum Einsatz, wenn dargestellt werden soll, was in einem System abläuft.

Übersicht über UML-Diagrammtypen:

UML-Diagramme

Klassen mit ihren Attributen, Methoden und Beziehungen werden mit dem UML Klassendiagramm modelliert. Das UML Klassendiagramm ist weltweit eine der am häufigsten genutzen Dokumentationsformen bei der objektorientierten Systementwicklung. Alle anderen Strukturdiagramme der UML bauen mehr oder weniger auf den Modellierungskonzepten des Klassendiagramms auf.

Objektdiagramme sind eine Spezialform der Klassendiagramme. Mit ihnen kann man ganz konkrete Ausprägungen von Klassen darstellen. Dazu werden Objekte modelliert, deren Attribute Werte enthalten. Objekte unterscheiden sich von Klassen dahingehend, dass...

  1. ... jedes Objekt mit einer eindeutigen ID identifizierbar ist (hier "id1" und "id2"), notiert links vom Klassennamen gefolgt von einem Doppelpunkt ":".
  2. ... zu jedem Attribut eines Objekts ein konketer Wert dargestellt ist.
Alle Objekte einer Klasse haben dabei die gleichen Attribute, nur deren Werte können sich unterscheiden.

Objektdiagramm