Das Strukturmuster Kompositum von C. Günther, T. Hammerschmidt und D. Kuhn
Zweck Ratloser Montage-Roboter, der nicht weiß wie viele Objekte er Montieren muss
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
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?