110 likes | 193 Views
-LABORPRAKTIKUM- SOMMERSEMESTER 2005. „Umsetzung von Pattern“. Muster: Kompositum Gruppe: Karsten Ameling Anja Rothe Quelle: Gamma, E., Helm, R., Jonson, R., Vlissides, J., „Entwurfsmuster“, Addison Wesley, Bonn, 1996. Zweck. Kompositum (Composite): objektbasiertes Strukturmuster
E N D
-LABORPRAKTIKUM-SOMMERSEMESTER 2005 „Umsetzung von Pattern“ Muster: Kompositum Gruppe: Karsten Ameling Anja Rothe Quelle: Gamma, E., Helm, R., Jonson, R., Vlissides, J., „Entwurfsmuster“, Addison Wesley, Bonn, 1996
Zweck • Kompositum (Composite): • objektbasiertes Strukturmuster • Zweck: • Zusammenfügung von Objekten zu Baumstrukturen, um Teil-Ganzes-Hierarchien zu repräsentieren • - ermöglicht es Klienten, sowohl einzelne Objekte als auch Kompositionen von Objekten einheitlich zu behandeln • Kompositum (Composite) • Zweck • Motivation • Anwendbarkeit • Struktur • Interaktionen • Konsequenzen • Implementierung • Verwandte Muster
eineDatei eineDatei eineDatei eineDatei eineDatei eineDatei eineDatei einOrdner einOrdner einOrdner Motivation Beispielszenario: Dateisystem • Kompositum (Composite) • Zweck • Motivation • Anwendbarkeit • Struktur • Interaktionen • Konsequenzen • Implementierung • Verwandte Muster Abb. 1: rekursiv zusammengefügte Objektstruktur
Anwendbarkeit • Die Verwendung des Kompositionsmusters bietet sich an, wenn • Teil-Ganzes-Hierarchien von Objekten repräsentiert werden sollen • Klienten in der Lage sein sollen, die Unterschiede zwischen zusammengesetzten und einzelnen Objekten zu ignorieren • Kompositum (Composite) • Zweck • Motivation • Anwendbarkeit • Struktur • Interaktionen • Konsequenzen • Implementierung • Verwandte Muster
Struktur Klient Komponente Kompositum Operation() FuegeHinzu(Komponente) Entferne(Komponente) GibKindobjekt(int) Operation() FuegeHinzu(Komponente) Entferne(Komponente) GibKindobjekt(int) Operation() Blatt • Kompositum (Composite) • Zweck • Motivation • Anwendbarkeit • Struktur • Interaktionen • Konsequenzen • Implementierung • Verwandte Muster kindobjekte für alle g in kindobjekte g.Operation(); Abb. 2: grundlegende Struktur des Kompositionsmusters
Interaktionen • Klassenschnittstelle von Komponente zur Interaktion mit Objekten in der Kompositionsstruktur verwendet • Fälle: • 1.) Empfänger ist ein Blatt: • - Anfrage wird direkt abgehandelt • 2.) Empfänger ist ein Kompositum: • - Weiterleitung der Anfrage an die Kindobjektkomponenten • - ggf. Ausführung zusätzlicher Operationen vor und/oder • nach der Weiterleitung • Kompositum (Composite) • Zweck • Motivation • Anwendbarkeit • Struktur • Interaktionen • Konsequenzen • Implementierung • Verwandte Muster
Konsequenzen Das Kompositionsmuster + definiert Klassenhierarchien auf Basis von Klassen für primitive und zusammengesetzte Objekte + vereinfacht den Klienten dadurch, dass er Kompositions- strukturen und einzelne Objekte einheitlich behandeln kann + vereinfacht es, neue Arten von Komponenten hinzuzufügen - kann ihren Entwurf zu allgemein werden lassen • Kompositum (Composite) • Zweck • Motivation • Anwendbarkeit • Struktur • Interaktionen • Konsequenzen • Implementierung • Verwandte Muster
Implementierung (1/3) Bei der Implementierung zu bedenkende Punkte: 1.) Explizite Referenz auf das Elternobjekt - Aufrechterhaltung von Referenzen vereinfacht Traversierung und Verwaltung einer Kompositionsstruktur 2.) Gemeinsame Nutzung von Komponenten- zur Senkung der Speicheranforderungen - ggf. Speicherung mehrfacher Elternobjekte durch die Kindobjekte 3.) Maximierung der Komponentenschnittstelle - Definition möglichst vieler gemeinsamer Operationen der Blatt- und Kompositionsklassen in der Komponentenklasse - Komponentenklasse bietet Defaultimplementierungen, die von den Blatt- und Kompositionsklassen überschrieben werden • Kompositum (Composite) • Zweck • Motivation • Anwendbarkeit • Struktur • Interaktionen • Konsequenzen • Implementierung • Verwandte Muster
Implementierung (2/3) 4.) Deklaration von Verwaltungsoperationen für Kindobjekte- Entscheidung für den Ort der Definition nach Abwägen der Vor- und Nachteile bzgl. Sicherheit und Transparenz KomponentenklasseKompositionsklasse+ Transparenz + Sicherheit - Sicherheit - Transparenz 5.) Ort des Behälters für enthaltene Komponenten - Einfügen der Behälterreferenz in die Oberklasse (Komponenten-klasse) führt zur Verschwendung von Speicherplatz in den Blättern 6.) Ordnung der Kindobjekte - Entwurf von Zugriffs- und Verwaltungsschnittstellen zur korrekten Verwaltung der Kindobjekt-Reihenfolge erforderlich • Kompositum (Composite) • Zweck • Motivation • Anwendbarkeit • Struktur • Interaktionen • Konsequenzen • Implementierung • Verwandte Muster
Implementierung (3/3) 7.) Verbessern des Laufzeitverhaltens durch Zwischenspeicherung (Caching) - Zwischenspeicherung von Traversierungs- und Suchinformationen über Kindobjekte in Kompositionsklasse möglich, um Traversierung oder Suche abzukürzen - Definition einer Schnittstelle erforderlich, um bei Änderungen einer Komponente die Invalidierung des Zwischenspeichers ihres Eltern- objektes zu erreichen 8.) Löschen der Komponenten - üblicherweise Kompositum für das Löschen seiner Kindobjekte zuständig gemacht, wenn es selbst gelöscht wird 9.) Datenstrukturen zum Speichern von Komponenten - Vielzahl von Datenstrukturen (z. B. verkettete Listen, Bäume, Arrays, Hash-Tabellen) zum Speichern von Kindobjekten geeignet - Wahl der Datenstruktur von der gewünschten Effizienz abhängig • Kompositum (Composite) • Zweck • Motivation • Anwendbarkeit • Struktur • Interaktionen • Konsequenzen • Implementierung • Verwandte Muster
Verwandte Muster • Bezug zu anderen Entwurfsmustern • Zuständigkeitskette • Dekorierermuster • Fliegengewichtmuster • Iteratormuster • Besuchermuster • Kompositum (Composite) • Zweck • Motivation • Anwendbarkeit • Struktur • Interaktionen • Konsequenzen • Implementierung • Verwandte Muster