Das Strukturmuster „Kompositum“

von C. Günther, T. Hammerschmidt und D. Kuhn

Zweck (I)

Zweck (II)

Entwurfsproblem:

Klient muss zwischen Blättern und Gruppierungen unterscheiden

Lösung:

Einheitliche Behandlung von Objekten und Objektgruppen

Zusammenfassung von Objekten in Baumstrukturen

Motivation

Beispielproblem: Fahrzeugmontage

Fahrzeug besteht aus...

primitiven Teilen: Schrauben, Muttern, Ventile, ...

Baugruppen: Motor, Bodenplatte, Getriebe, ...

Grundidee: behandle primitive Teile und Baugruppen einheitlich

Realisierung

Abstrakte Klasse “Komponente”

repräsentiert sowohl primitive Teile als auch Baugruppen

deklariert (implementiert evtl.) gemeinsame Operationen

Anwendbarkeit

Anwendbar wenn...

einheitliche Behandlung von primitiven und
zusammengesetzten Objekten erforderlich

Teil-Ganzes-Hierarchien repräsentiert werden sollen

Struktur (I)

Struktur (II)

Struktur (III)

Baugruppe

(komplexes Objekt)

Primitive Bauteile

(Blätter)

Primitive Bauteile

(Blätter)

Baugruppe

(komplexes Objekt)

Teilnehmer (I)

Komponente:

deklariert Schnittstelle für die Objekte

implementiert evtl. Standardverhalten für einige Methoden

kann Schnittstelle für Kindobjektverwaltung bereitstellen

im Beispiel: Bauteil

Teilnehmer (II)

Blatt:

primitives Objekt ohne Kindobjekte

implementiert konkrete Methoden

im Beispiel: Einzelteil

Teilnehmer (III)

Kompositum:

Behälter (Container) für Kindobjekte

implementiert Methoden zur Kinderverwaltung

im Beispiel: Baugruppe

Teilnehmer (IV)

Klient:

manipuliert die Objekte über die Komponentenschnittstelle

im Beispiel: Steuerprogramm für Roboter

Interaktionen

Klient:

kommuniziert mit Objekten der Kompositionsstruktur über Schnittstelle der Komponente

ist Empfänger Blatt, so direkte Abhandlung

ist Empfänger Komposition, so Weiterleitung der Nachricht
an Kindobjekte (evtl. Ausführung zusätzlicher Operationen
vor oder nach der Weiterleitung)

Konsequenzen (I)

Vorteile:

primitive Objekte können zu komplexeren
zusammengesetzt werden, rekursive Wiederholung
möglich

kein Unterschied zwischen primitiven und komplexen
Objekten -> vereinfacht Klient

einfach erweiterbar

Konsequenzen (II)

Nachteile:

kann Entwurf zu allgemein werden lassen

keine Kontrolle über abgeleiteten Klassen bzgl.
Einschränkung

Implementierung (I)

explizite Referenzen auf Elternobjekt

gemeinsame Nutzung von Komponenten (Speicherplatz)

Maximierung der Komponentenschnittstelle

Deklaration von Verwaltungsoperationen für Kindobjekte

Ort des Behälters für enthaltene Komponenten

Implementierung (II)

Ordnung der Kindobjekte

Verbesserung des Laufverhaltens durch Zwischenspeichern

Löschen der Komponenten

Datenstrukturen zum Speichern von Komponenten

Verwandte Muster

Zuständigkeitskette

Dekoriermuster

Fliegengewichtmuster

Iteratormuster

Besuchermuster

Noch Fragen?

2005-06-15T14:59:18