-LABORPRAKTIKUMSOMMERSEMESTER 2005 -LaborpraktikumSommersemester 2005 „Umsetzung von Pattern“ „Umsetzung von Pattern“ Muster: -ITERATOR(Verhaltensmuster) Gruppe: Folie 1 Jan-Peter Schmidt Matthias Teske -Fernstudium Informatik-Matrikel 2000- Jan-Peter Schmidt Matthias Teske Quellen: • Gamma, E., Helm, R., Jonson, R., Vlissides, J., „Entwurfsmuster“, Addison Wesley, Bonn, 1996 • Prof. Dr. Uwe Schmidt, FH Wedel, Vorlesung „Softwaredesign“ www.fh-wedel.de/~si/vorlesungen/softwaredesign/Verhaltensmuster/Iterator.html 1. Klassifizierung und Zweck -LaborpraktikumSommersemester 2005 „Umsetzung von Pattern“ Muster „Iterator“ 1. 2. 3. 4. 5. 6. 7. 8. 9. Klassifizierung und Zweck Motivation Anwendbarkeit Struktur Teilnehmer Konsequenzen Implementierung Beispiel Verwandte Muster Klassifizierung: Das Iteratormuster gehört zu den objektbasierten Verhaltensmustern Zweck: Ermögliche den sequentiellen Zugriff auf die Elemente eines zusammengesetzten Objekts, ohne seine zugrunde liegende Repräsentation offen zu legen. Hinweis: Der Iterator ist auch bekannt als Cursor Folie 2 Jan-Peter Schmidt Matthias Teske -Fernstudium Informatik-Matrikel 2000- 2. Motivation (1/3) -LaborpraktikumSommersemester 2005 „Umsetzung von Pattern“ Muster „Iterator“ 1. 2. 3. 4. 5. 6. 7. 8. 9. Klassifizierung und Zweck Motivation (1/3) Anwendbarkeit Struktur Teilnehmer Konsequenzen Implementierung Beispiel Verwandte Muster Folie 3 Jan-Peter Schmidt Matthias Teske -Fernstudium Informatik-Matrikel 2000- Gegeben: • Zusammengesetztes Objekt, z.B. Liste Anforderungen: • Auf alle Elemente dieser Liste soll zugegriffen werden können • Zugriff unabhängig von interner Struktur • Zugriff soll auf verschiedene Art möglich sein • Schnittstelle der Listenklasse soll trotzdem schlank bleiben • Mehrfach gleichzeitige Traversierung soll möglich sein 2. Motivation (2/3) -LaborpraktikumSommersemester 2005 „Umsetzung von Pattern“ Muster „Iterator“ 1. 2. 3. 4. 5. 6. 7. 8. 9. Klassifizierung und Zweck Motivation (2/3) Anwendbarkeit Struktur Teilnehmer Konsequenzen Implementierung Beispiel Verwandte Muster Folie 4 Jan-Peter Schmidt Matthias Teske -Fernstudium Informatik-Matrikel 2000- Idee: • Zuständigkeit für Zugriff sowie Funktionalität zur Traversierung aus Listenobjekt ausgliedern • Diese Funktionalität einem „Iterator-Objekt“ zuteilen • Klasse Iterator definiert Schnittstelle zum Zugriff auf Listenelemente Beispiel: • Klasse Liste führt zu der Klasse ListenIterator • Diese Klasse stellt die Methoden Start(), Weiter(), IstFertig() und AktuellesElement() bereit 2. Motivation (3/3) -LaborpraktikumSommersemester 2005 „Umsetzung von Pattern“ Muster „Iterator“ 1. 2. 3. 4. 5. 6. 7. 8. 9. Klassifizierung und Zweck Motivation (3/3) Anwendbarkeit Struktur Teilnehmer Konsequenzen Implementierung Beispiel Verwandte Muster Problematik: • Iterator und Liste sind gekoppelt, Client muss wissen, dass es eine „Liste“ ist und keine andere Struktur • Somit Festlegung auf bestimmte Struktur Erweiterte Idee: • Ausweitung des Iteratorkonzepts auf polymorphe Iteration • Definition der Klasse AbstrakteListe einheitliche Schnittstelle • Dementsprechend Definition der abstrakten Klasse Iterator Folie 5 Jan-Peter Schmidt Matthias Teske -Fernstudium Informatik-Matrikel 2000- • Abstrakte Liste hat Methode ErzeugeIterator, somit wird für jede konkrete Unterklasse spezieller Iterator erzeugt 3. Anwendbarkeit -LaborpraktikumSommersemester 2005 „Umsetzung von Pattern“ Muster „Iterator“ 1. 2. 3. 4. 5. 6. 7. 8. 9. Klassifizierung und Zweck Motivation Anwendbarkeit Struktur Teilnehmer Konsequenzen Implementierung Beispiel Verwandte Muster Folie 6 Jan-Peter Schmidt Matthias Teske -Fernstudium Informatik-Matrikel 2000- • Zugriff auf Elemente eines zusammengesetzten Objekts ohne Offenlegung der internen Struktur • mehrfache gleichzeitige bzw. geschachtelte Traversierung • einheitliche Schnittstelle zur Traversierung unterschiedlich zusammengesetzter Strukturen (polymorphe Iteration) • weniger geeignet, wenn Objekt rekursiv definiert ist • Kompositum nicht mit Iteratoren verarbeiten, sondern mit Interpretierer und Besucher 4. Struktur -LaborpraktikumSommersemester 2005 „Umsetzung von Pattern“ Muster „Iterator“ 1. 2. 3. 4. 5. 6. 7. 8. 9. Klassifizierung und Zweck Motivation Anwendbarkeit Struktur Teilnehmer Konsequenzen Implementierung Beispiel Verwandte Muster Folie 7 Jan-Peter Schmidt Matthias Teske -Fernstudium Informatik-Matrikel 2000- 5. Teilnehmer -LaborpraktikumSommersemester 2005 „Umsetzung von Pattern“ Muster „Iterator“ 1. 2. 3. 4. 5. 6. 7. 8. 9. Klassifizierung und Zweck Motivation Anwendbarkeit Struktur Teilnehmer Konsequenzen Implementierung Beispiel Verwandte Muster Folie 8 Jan-Peter Schmidt Matthias Teske -Fernstudium Informatik-Matrikel 2000- Iterator: • definiert Schnittstelle zum Zugriff auf Elemente und zur Traversierung dieser KonkreterIterator: • implementiert Schnittstelle von Iterator • verwaltet aktuelle Position während Traversierung Aggregat: • definiert Schnittstelle für Erzeugung Objekt der Klasse Iterator Konkretes Aggregat: • implementiert Operationen zum Erzeugen eines konkreten Iterators • gibt Objekt der passenden KonkreterIterator-Klasse zurück 6. Konsequenzen -LaborpraktikumSommersemester 2005 „Umsetzung von Pattern“ Muster „Iterator“ 1. 2. 3. 4. 5. 6. 7. 8. 9. Klassifizierung und Zweck Motivation Anwendbarkeit Struktur Teilnehmer Konsequenzen Implementierung Beispiel Verwandte Muster Folie 9 Jan-Peter Schmidt Matthias Teske -Fernstudium Informatik-Matrikel 2000- • Möglichkeit von Varianten der Traversierung, z.B. Vorwärtsund Rückwärtstraversierung • Vereinfachung der Aggregatschnittstelle, Aggregatklassen brauchen keine Iterationsschnittstelle anbieten • Ein Aggregat kann mehr als einmal gleichzeitig traversiert werden, da der Iterator seinen eigenen Zustand verwaltet • Verwaltung ist allerdings nicht immer trivial: Bsp. Binärbaum Der gesamte Pfad vom aktuellen Element (Knoten) bis zur Wurzel muss im Iterator verwaltet werden • Während der Iteration dürfen keine Modifikationen am Aggregat vorgenommen werden (Traversierung einer Kopie ist teuer) 7. Implementierung (1/2) -LaborpraktikumSommersemester 2005 „Umsetzung von Pattern“ Muster „Iterator“ 1. 2. 3. 4. 5. 6. 7. 8. 9. Klassifizierung und Zweck Motivation Anwendbarkeit Struktur Teilnehmer Konsequenzen Implementierung (1/2) Beispiel Verwandte Muster Folie 10 Jan-Peter Schmidt Matthias Teske -Fernstudium Informatik-Matrikel 2000- Viele Varianten und Alternativen möglich, z.B.: • Steuerung der Iteration - interner (passiver) Iterator: Iterator steuert selbst - externer (aktiver) Iterator: Client steuert Iteration, flexiblere Variante: Prüfung auf Gleichheit zweier Behälter möglich • Definition des Traversierungsalgorithmus - muss nicht zwingend im Iterator erfolgen, auch im Aggregat möglich: Iterator speichert nur Zustand Cursor! • Robustheit - stellt sicher, dass das Einfügen und Entfernen von Objekten nicht mit Traversierung in Konflikt gerät, ohne Aggregat zu kopieren 7. Implementierung (2/2) -LaborpraktikumSommersemester 2005 „Umsetzung von Pattern“ Muster „Iterator“ 1. 2. 3. 4. 5. 6. 7. 8. 9. Klassifizierung und Zweck Motivation Anwendbarkeit Struktur Teilnehmer Konsequenzen Implementierung (2/2) Beispiel Verwandte Muster Folie 11 Jan-Peter Schmidt Matthias Teske -Fernstudium Informatik-Matrikel 2000- • Zusätzliche Iteratoroperationen - Erweiterung der Schnittstelle des Iterators um Operationen wie Zurück() oder SpringeAuf(Element) • Iteratoren für Komposita - Externe Iteratoren sind für rekursive Aggregationsstrukturen schwer zu implementieren - Einfacher durch internen Iterator, Speicherung der aktuellen Position durch rekursiven Aufruf - Preorder, Inorder-, Postorder- und Breitentraversierung von Komposita müssen über eigene Klasse möglich sein • Nulliteratoren - nützlich für Handhabung von Grenzbedingungen - ist immer am Ende der Iteration angelangt, also IstFertig() liefert immer true - zur leichteren Traversierung von baumförmigen Aggregaten 8. Beispiel (1/11) 1. Definition allgemeiner Interfaces -LaborpraktikumSommersemester 2005 „Umsetzung von Pattern“ 1.1 Interface „Aggregat“ Muster „Iterator“ 1. 2. 3. 4. 5. 6. 7. 8. 9. Klassifizierung und Zweck Motivation Anwendbarkeit Struktur Teilnehmer Konsequenzen Implementierung Beispiel (1/11) Verwandte Muster 1.2 Interface „Iterator“ 1.3 Interface „Drucken“: Folie 12 Jan-Peter Schmidt Matthias Teske -Fernstudium Informatik-Matrikel 2000- 8. Beispiel (2/11) 2. Beispiel-Implementierung: „Aggregat und Iterator“ -LaborpraktikumSommersemester 2005 „Umsetzung von Pattern“ Muster „Iterator“ 1. 2. 3. 4. 5. 6. 7. 8. 9. Klassifizierung und Zweck Motivation Anwendbarkeit Struktur Teilnehmer Konsequenzen Implementierung Beispiel (2/11) Verwandte Muster Folie 13 Jan-Peter Schmidt Matthias Teske -Fernstudium Informatik-Matrikel 2000- Beispiel 2.1: „MyArrayList“ / „MyArrayListIterator“ 8. Beispiel (3/11) 2. Beispiel-Implementierung: „Aggregat und Iterator“ -LaborpraktikumSommersemester 2005 „Umsetzung von Pattern“ Muster „Iterator“ 1. 2. 3. 4. 5. 6. 7. 8. 9. Klassifizierung und Zweck Motivation Anwendbarkeit Struktur Teilnehmer Konsequenzen Implementierung Beispiel (3/11) Verwandte Muster Folie 14 Jan-Peter Schmidt Matthias Teske -Fernstudium Informatik-Matrikel 2000- Beispiel 2.1: „MyArrayList“ / „MyArrayListIterator“ 8. Beispiel (4/11) 2. Beispiel-Implementierung: „Aggregat und Iterator“ -LaborpraktikumSommersemester 2005 „Umsetzung von Pattern“ Muster „Iterator“ 1. 2. 3. 4. 5. 6. 7. 8. 9. Klassifizierung und Zweck Motivation Anwendbarkeit Struktur Teilnehmer Konsequenzen Implementierung Beispiel (4/11) Verwandte Muster Folie 15 Jan-Peter Schmidt Matthias Teske -Fernstudium Informatik-Matrikel 2000- Beispiel 2.2.1: „MyTree“ / „MyTreeIterator“ 8. Beispiel (5/11) 2. Beispiel-Implementierung: „Aggregat und Iterator“ -LaborpraktikumSommersemester 2005 „Umsetzung von Pattern“ Muster „Iterator“ 1. 2. 3. 4. 5. 6. 7. 8. 9. Klassifizierung und Zweck Motivation Anwendbarkeit Struktur Teilnehmer Konsequenzen Implementierung Beispiel (5/11) Verwandte Muster Folie 16 Jan-Peter Schmidt Matthias Teske -Fernstudium Informatik-Matrikel 2000- Beispiel 2.2.1: „MyTree“ / „MyTreeIterator“ 8. Beispiel (6/11) 2. Beispiel-Implementierung: „Aggregat und Iterator“ -LaborpraktikumSommersemester 2005 „Umsetzung von Pattern“ Muster „Iterator“ 1. 2. 3. 4. 5. 6. 7. 8. 9. Klassifizierung und Zweck Motivation Anwendbarkeit Struktur Teilnehmer Konsequenzen Implementierung Beispiel (6/11) Verwandte Muster Folie 17 Jan-Peter Schmidt Matthias Teske -Fernstudium Informatik-Matrikel 2000- Beispiel 2.2.2: „MyReverseTree“ / „MyReverseTreeIterator“ 8. Beispiel (7/11) 2. Beispiel-Implementierung: „Aggregat und Iterator“ -LaborpraktikumSommersemester 2005 „Umsetzung von Pattern“ Muster „Iterator“ 1. 2. 3. 4. 5. 6. 7. 8. 9. Klassifizierung und Zweck Motivation Anwendbarkeit Struktur Teilnehmer Konsequenzen Implementierung Beispiel (7/11) Verwandte Muster Folie 18 Jan-Peter Schmidt Matthias Teske -Fernstudium Informatik-Matrikel 2000- Beispiel 2.2.2: „MyReverseTree“ / „MyReverseTreeIterator“ 8. Beispiel (8/11) 3. Beispiel-Anwendung „PersonenListe“ -LaborpraktikumSommersemester 2005 „Umsetzung von Pattern“ Muster „Iterator“ 1. 2. 3. 4. 5. 6. 7. 8. 9. Klassifizierung und Zweck Motivation Anwendbarkeit Struktur Teilnehmer Konsequenzen Implementierung Beispiel (8/11) Verwandte Muster Folie 19 Jan-Peter Schmidt Matthias Teske -Fernstudium Informatik-Matrikel 2000- 3.1 Klasse „Client“: 8. Beispiel (9/11) 3. Beispiel-Anwendung „PersonenListe“ -LaborpraktikumSommersemester 2005 „Umsetzung von Pattern“ Muster „Iterator“ 1. 2. 3. 4. 5. 6. 7. 8. 9. Klassifizierung und Zweck Motivation Anwendbarkeit Struktur Teilnehmer Konsequenzen Implementierung Beispiel (9/11) Verwandte Muster Folie 20 Jan-Peter Schmidt Matthias Teske -Fernstudium Informatik-Matrikel 2000- 3.2 Klasse „Person“: 8. Beispiel (10/11) 3. Beispiel-Anwendung „PersonenListe“ -LaborpraktikumSommersemester 2005 „Umsetzung von Pattern“ Muster „Iterator“ 1. 2. 3. 4. 5. 6. 7. 8. 9. Klassifizierung und Zweck Motivation Anwendbarkeit Struktur Teilnehmer Konsequenzen Implementierung Beispiel (10/11) Verwandte Muster Folie 21 Jan-Peter Schmidt Matthias Teske -Fernstudium Informatik-Matrikel 2000- 3.3 Klasse „PersonenListe“: 8. Beispiel (11/11) 4. Visualisierung als Eclipse-PlugIn -LaborpraktikumSommersemester 2005 „Umsetzung von Pattern“ Muster „Iterator“ 1. 2. 3. 4. 5. 6. 7. 8. 9. Klassifizierung und Zweck Motivation Anwendbarkeit Struktur Teilnehmer Konsequenzen Implementierung Beispiel (11/11) Verwandte Muster Folie 22 Jan-Peter Schmidt Matthias Teske -Fernstudium Informatik-Matrikel 2000- 9. Verwandte Muster -LaborpraktikumSommersemester 2005 „Umsetzung von Pattern“ Muster „Iterator“ 1. 2. 3. 4. 5. 6. 7. 8. 9. Klassifizierung und Zweck Motivation Anwendbarkeit Struktur Teilnehmer Konsequenzen Implementierung Beispiel Verwandte Muster Folie 23 Jan-Peter Schmidt Matthias Teske -Fernstudium Informatik-Matrikel 2000- Kompositum: • Iteratoren werden oft auf rekursive Strukturen wie Komposita angewendet Fabrikmethode: • Polymorphe Iteratoren beruhen auf Fabrikmethode, um Objekt der richtigen Iteratorunterklasse zu erzeugen Memento: • Iterator kann Memento nutzen, um den Zustand einer Iteration zwischenzuspeichern • Memento wird hier vom Iterator intern gespeichert