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