Objektorientierte Modellierung - Statisches Modell - Theorie

Transcription

Objektorientierte Modellierung - Statisches Modell - Theorie
Universität Stuttgart
Institut für Automatisierungstechnik und Softwaresysteme
Prof. Dr.-Ing. M. Weyrich
Theorie zu Übung 2 „Objektorientierte Modellierung - Statisches Modell“
Identifikation von Assoziationen
Eine weitere Aufgabe bei der Erstellung des Klassenmodells ist es, wichtige reale
Beziehungen oder Assoziationen (associations) zwischen den Klassen zu identifizieren und zu benennen. Dies geschieht aus zwei Gründen:
1. Wozu benötigt man Assoziationen?
Letztlich gibt es zwei Zielsetzungen, die in der Analyse mit Assoziationen erreicht
werden sollen:

Um das Verständnis des Problembereichs zu klären. Dazu beschreiben wir die
Objekte im Hinblick darauf, wie sie zusammenarbeiten.

Um die Kopplung (Summe aller Abhängigkeiten) zu überprüfen, d.h. sicherzustellen, dass wir bei der Strukturierung des Systems sauber vorgehen.
Der zweite Punkt hier bedarf noch einer Erklärung. Nimmt man von einem Objekt an,
dass es zu einem anderen in enger (logischer) Beziehung steht, dann ist es wahrscheinlich relativ problemlos, wenn die jeweiligen Klassen, zur denen diese Objekte
gehören, eine enge Kopplung (Abhängigkeit) eingehen. Dafür gibt es mindestens die
folgenden beiden Begründungen:
1. Änderung: Haben Objekte des Problembereichs konzeptuell eine Beziehung zueinander, dann wird eine mit der Wartung betraute Person, die über diese Beziehung weiß, auch eine Abhängigkeit zwischen den entsprechenden Klassen annehmen. Es kann daher ebenfalls angenommen werden, dass diese Person auch
auf diese Abhängigkeit achtet, wenn sie Änderungen an einer der Klassen vornimmt. Auf diese Weise ist die Wahrscheinlichkeit geringer, dass aufgrund dieser
Abhängigkeit ein Problem auftritt.
2. Wiederverwendung: Sind die Objekte des Problembereichs konzeptionell verwandt, dann ist es wahrscheinlicher, dass eine Applikation, die eine der Klassen
wiederverwenden kann, auch die andere wiederverwenden kann. Obwohl also
jegliche Kopplung in einem System die Wiederverwendung erschwert und komplizierter macht, wird der Effekt hier relativ gutartig sein.
Beispiel für die Abhängigkeit
der Klassen zweier konzeptionell verwandter Objekte:
Artikel
Bezeichung
Bestellnummer
Katalog
*
enthält
*
Name
Info II - Grundlagen der Softwaretechnik
Übung 2: Statisches Modell
10
Denken Sie an die Behauptung, dass ein Hauptargument für die Objektorientierung
ist, dass die Struktur eines objektorientierten Systems die Struktur der Wirklichkeit
abbildet.
2. Wie identifiziert man Assoziationen?
Auf die gleiche Weise wie Klassen mit Hauptwörtern korrespondieren Assoziationen
mit Verben. Sie drücken die Beziehung zwischen Objekten ihrer Klassen aus.
Assoziationen können wir konzeptionell vom Standpunkt der Implementierung aus
betrachten. Vom Konzept her bezeichnen wir etwas als Assoziation, wenn es in der
realen Welt eine Verbindung gibt, die durch einen Satz wie „ein Bibliotheksmitglied
entleiht ein Buch" beschrieben werden kann und dieser Satz für das bearbeitete System relevant ist.
Die Klasse A und die Klasse B sind assoziiert, wenn

ein Objekt der Klasse A eine Nachricht an ein Objekt der Klasse B schickt

ein Objekt der Klasse A ein Objekt der Klasse B kreiert

ein Objekt der Klasse A ein Attribut besitzt, dessen Werte Objekte oder Zusammenstellungen von Objekten der Klasse B sind (Beispiel: Die Klasse Student in
einer Diplomarbeitsverwaltung hat ein Attribut der elementaren Klasse NoteT)

ein Objekt der Klasse A eine Nachricht entgegennimmt, in der ein Objekt der
Klasse B als Argument enthalten ist
kurz: wenn ein Objekt der Klasse A etwas wissen muss über ein Objekt der Klasse B.
Jede Objektbeziehung, d.h. jede Instanz der Assoziation, verbindet ein Objekt der
Klasse A mit einem Objekt der Klasse B. So könnte beispielsweise in einer Bibliothek
eine mögliche Assoziation entleiht/gibt zurück zwischen einem Bibliotheksmitglied und dem Exemplar eines Buches die folgenden Objektbeziehungen haben:

Joe Bloggs entleiht/gibt zurück Exemplar 17 von The Dilbert Principle

Marcus Smith entleiht/gibt zurück Exemplar 1 von The Dilbert Principle

Joe Bloggs entleiht/gibt zurück Exemplar 4 von Software Reuse
Info II - Grundlagen der Softwaretechnik
Übung 2: Statisches Modell
11
3. Was bedeutet eine Assoziation auf der Implementierungsebene?
In der Vorlesung wurde darauf hingewiesen, dass eine Assoziation stets Verbindungen zwischen Objekten und nicht zwischen Klassen beschreibt. Eine Assoziation
zwischen zwei Klassen im Klassendiagramm modelliert also die Tatsache, das zwischen einzelnen konkreten Objekten dieser Klassen eine Verbindung besteht / bestehen kann. Die Assoziation legt zusätzlich fest, zu wie vielen Objekten der anderen
Klasse ein Objekt eine Beziehung haben kann / darf / muss und welche Rolle die
beteiligten Objekte in dieser Beziehung einnehmen.
Auf der Implementierungsebene bedeutet eine Assoziation letztlich, dass ein Objekt
eine Referenz auf ein anderes Objekt besitzt und so auf das andere Objekt zugreifen
oder diesem Nachrichten schicken kann. Dies wird an folgendem Beispiel deutlich.
Diagramm
A
1
kennt
Code
class A{
B meinPartner;
...
}
0..1 meinPartner
B
machwas()
einA:A
einB:B
class B{
machwas(){...}
...
}
A einA = new A();
B einB = new B();
einA.meinPartner
= einB;
einA.meinPartner.
machwas();
Bedeutung
Eine Klasse A hat eine Assoziation zur Klasse B. Ein Objekt von A kann dabei max. ein
Objekt von B kennen. In der Assoziation hat
das Objekt von B die Rolle meinPartner.
Im Klassendiagramm wird also lediglich festgelegt, dass es diese Beziehung geben kann.
Genauso wird bei der Klassendefinition im
Code festgelegt, dass es in der Klasse A ein
Attribut meinPartner vom Typ B gibt. Dieses
Attribut kann später die Referenz auf ein konkretes Objekt der Klasse B aufnehmen.
Das Objektdiagramm zeigt die konkrete Instanz einer Assoziation zwischen zwei konkreten Objekten einA und einB.
Im Quellcode ist zu sehen, dass die zwei
Objekte einA der Klasse A und einB der
Klasse B erzeugt wurden. Anschließend wird
dem Attribut meinPartner von einA die Referenz auf einB zugewiesen. Ab diesem Moment existiert die Beziehung zwischen einA
und einB und einA kann einB z.B. die Nachricht machwas() schicken.
Hinweis: Das Geheimnisprinzip wurde hier
zur Vereinfachung übergangen.
[Teile des Textes entstammen der Quelle: P. Stevens; R. Pooley, „UML - Softwareentwicklung mit Objekten und
Komponenten“, Person Studium]
Info II - Grundlagen der Softwaretechnik
Übung 2: Statisches Modell
12