Modellierung mit
UML
Loading

4 Objektdiagramme

Objektdiagramme haben in der UML/P die Rolle, Strukturen auf exemplarischer Basis zu modellieren. Sie sind daher besonders geeignet, statisch unveränderliche Strukturen in dynamischen objektorientierten Systemen oder spezielle Situationen darzustellen, die etwa als Vor- oder Nachbedingung bei Tests verwendet werden. In diesem Kapitel werden Objektdiagramme eingeführt und ihr methodischer Einsatz diskutiert. Die Integration mit der OCL führt zu einer „Logik für Objektdiagramme“.


4.1 Einführung in Objektdiagramme
4.1.1 Objekte
4.1.2 Attribute
4.1.3 Links
4.1.4 Qualifizierte Links
4.1.5 Komposition
4.1.6 Merkmale und Stereotypen
4.2 Bedeutung eines Objektdiagramms
4.2.1 Unvollständigkeit und Exemplarizität
4.2.2 Prototypische Objekte
4.2.3 Instanz versus Modellinstanz
4.3 Logik der Objektdiagramme
4.3.1 Namen für ein Diagramm
4.3.2 Bindung von Objektnamen
4.3.3 Integration von Objektdiagramm und OCL
4.3.5 OCL-Bedingungen im Objektdiagramm
4.3.6 Abstrakte Objektdiagramme
4.4 Methodische Verwendung von Objektdiagrammen
4.4.1 Komposition von Objektdiagrammen
4.4.2 Negation
4.4.3 Alternative Objektstrukturen
4.4.4 Objektdiagramme in einer Methodenspezifikation
4.4.5 Objekterzeugung
4.4.6 Gültigkeit von Objektdiagrammen
4.4.7 Initialisierung von Objektstrukturen
4.5 Zusammenfassung

Neben Klassendiagrammen sind vor allem Objektdiagramme geeignet, die Struktur eines Softwaresystems zu modellieren. Ein Objektdiagramm beschreibt eine Sammlung von Objekten und deren Beziehungen zu einem Zeitpunkt im Leben eines Systems. Objektdiagramme sind daher auf Instanzen fokussiert und haben einen exemplarischen Charakter. Mehrere Objektdiagramme können unterschiedliche Situationen zu verschiedenen Zeitpunkten innerhalb desselben Systemteils beschreiben.

Ein Objektdiagramm kann beispielsweise eingesetzt werden, um die Situation beim Start eines Systems zu charakterisieren, eine Ausgangs- oder Zielsituation für einen Test zu beschreiben oder eine fehlerhafte Situation zu illustrieren. Aufgrund ihrer exemplarischen Natur sind Objektdiagramme nicht sehr aussagekräftig, wenn der Situationskontext nicht ebenfalls beschrieben wird. Deshalb wird in diesem Kapitel neben einer Einführung in die Benutzung der Objektdiagramme auch eine Integration von Objektdiagrammen und der OCL-Logik vorgenommen. Einerseits werden OCL-Bedingungen dazu verwendet, zusätzliche Eigenschaften eines Objektdiagramms zu charakterisieren, andererseits wird die OCL-Logik eingesetzt, um Objektdiagramme zu kombinieren und als Vor- und Nachbedingungen für Methodenspezifikationen einzusetzen.

Im UML-Standard [OMG10a] werden Objektdiagramme als eigenständige Notation behandelt. Dies hat dazu geführt, dass diese Diagrammart noch zu wenig beachtet wird und sowohl in der allgemein angebotenen Werkzeugunterstützung als auch methodisch ihr Nischendasein erst jetzt aufgibt. Ein Objektdiagramm ist unter anderem perfekt geeignet, die Ausgangssituation eines Tests zu beschreiben. Dafür werden in dem Testframework JUnit [JUn11BG98BG99] spezielle Methoden zum Aufsetzen von Objektstrukturen verwendet, die aus Objektdiagrammen erzeugt werden können.

Durch die Separation der Notationen für Objektdiagramme und Klassendiagramme entsteht eine eigenständige und methodisch unabhängig einsetzbare Diagrammart. Dennoch haben Objektdiagramme eine geringere Bedeutung als Klassendiagramme, weil Klassendiagramme die wesentliche architektonische Beschreibung eines Systems darstellen. Objektdiagramme haben vor allem einen illustrativen Charakter und sind aufgrund ihrer Exemplarizität normalerweise nicht in der Lage, ein System vollständig zu beschreiben. Dennoch können Objektdiagramme in verschiedenen Phasen einer Softwareentwicklung, beginnend bei der Erhebung der Anforderungen bis zur Darstellung von fehlerhaften Situationen in der Wartung, eine wesentliche Rolle spielen.

Neben dem UML-Standard [OMG10a] gibt es kaum eigenständige Literatur, die sich mit dem Umgang von Objektdiagrammen auseinandersetzt. Jedoch wurden Erweiterungen zum Beispiel in [GHK99] diskutiert, die sich vor allem durch eine Anzahl von notationellen Konstrukten für spezielle Situationen auszeichnen. Eine auf Schnittstellenbeschreibungen ausgerichtete Erweiterung der Objektdiagramme wird in [HRR98] eingeführt. Die Frage, wie große Objektstrukturen modelliert werden können, ist in [Ber97] behandelt worden. Dabei wird eine interessante Erweiterung diskutiert, die Objekte entlang der Vererbungshierarchie in Teilobjekte zerlegt und dadurch objektinterne Aufrufstrukturen darstellen kann. Das ist besonders bei der Nutzung von Mehrfachvererbung wie bei C++ sinnvoll. Zusätzlich werden relativ reichhaltige Komponentendiagramme eingeführt, in denen Komponenten über Ports kommunizieren können. Eine andere Form des Umgangs mit Objektdiagramm-artigen Strukturen ist bei Graphgrammatiken [Roz99EEKR99WKS10AKRS06] zu finden, bei denen ein Teilgraph in einer Objektstruktur identifiziert wird und dann die in der Regel angegebenen strukturellen und inhaltlichen Veränderungen vorgenommen werden.

Abschnitt 4.1 bietet eine an Beispielen orientierte Einführung in die Nutzung der Objektdiagramme. Der darauffolgende Abschnitt diskutiert die Bedeutung eines Objektdiagramms und damit die Aussagen, die sich mit einem Objektdiagramm beschreiben lassen. Die Integration der Objektdiagramme mit der OCL-Logik wird in Abschnitt 4.3 vorgenommen und die sich daraus ergebenden methodischen Einsatzmöglichkeiten werden in Abschnitt 4.4 an Beispielen demonstriert. Anhang C.4 beschreibt schließlich ergänzend die vollständige abstrakte Syntax der Objektdiagramme und ihrer Logik-Erweiterung.

Objekt
im Objektdiagramm. Ein Objekt ist Instanz einer Klasse und enthält die von ihr festgelegten Attribute. Diese Attribute sind mit einem Wert initialisiert (ggf. noch uninitialisiert). Im Objektdiagramm werden prototypische Objekte verwendet, um exemplarische Situationen zu illustrieren. Zwischen den im Diagramm sichtbaren prototypischen Objekten und den echten Objekten des Systems besteht normalerweise keine 1:1-Beziehung (siehe dazu auch die Diskussion in Abschnitt 4.2).
Objektname
erlaubt die eindeutige Benennung des Objekts im Objektdiagramm. Als Objektname wird ein sprechender Name gewählt, der normalerweise im echten System nicht wiederzufinden ist, da dort systemspezifische Objektidentifikatoren verwendet werden.
Attribut
beschreibt eine Zustandskomponente eines Objekts. Ein Attribut im Objektdiagramm ist charakterisiert durch den Attributnamen, den Typ und einen konkreten Wert. Weitere Charakteristika, wie Sichtbarkeit, können dem Attribut angeheftet werden. In abstrakten Objektdiagrammen können statt konkreten Werten auch Variablennamen oder Ausdrücke eingesetzt werden, deren Inhalt im Diagramm „unspezifiziert“ bleibt. Attributtyp oder -wert können auch ausgelassen werden.
Link
ist eine Ausprägung einer Assoziation zwischen zwei Objekten, deren Klassen jeweils an der Assoziation partizipieren. Navigationsrichtung, Assoziations- und Rollennamen können auf dem Link ebenfalls dargestellt werden.
Kompositionslink
ist eine Sonderform des Links, bei dem neben der reinen Verbindung weitere Abhängigkeiten des Teilobjekts vom Ganzen bestehen. Ein Kompositionslink ist eine Ausprägung einer Komposition.
Abbildung 4.1: Begriffsdefinitionen für Objektdiagramme


Bernhard Rumpe. Agile Modellierung mit UML. Springer 2012