homeSoftwaredesign Softwaredesign: Iterator Prof. Dr. Uwe Schmidt FH Wedel

Iterator

weiter

weiter

Iterator

Klassifizierung
objektbasiertes Verhaltensmuster
weiter
Zweck
sequentieller Zugriff auf die Komponenten eines zusammengesetzten Objekts, ohne die innerer Struktur des Objekts offenzulegen
weiter
Alias
Cursor
weiter
Motivation
in Container-Klassen alle Elemente verarbeiten
Schleife über alle Elemente eines Containers
Schleife immer gleich, also als Schablonenmethode in einer gemeinsamen Oberklasse für alle Container implementieren
nur die Aufzählung aller Elemente in jeder Realisierung neu
weiter
Beispiel
weiter
Anwendbarkeit
Zugriff auf die Elemente eines Containers
(allgemein: eines zusammengesetzten Objekts)
ohne die Struktur des Containers offen zu legen
geschachtelte Iteration über den gleichen Container
einheitliche Schnittstelle zum Aufzählen von Objekten
ineffizient, wenn das zusammengesetzte Objekt rekursiv definiert ist, und eine Baumstruktur besitzt
effizienter: Kompositum nicht mit Iteratoren verarbeiten, sondern mit Interpretierer und Besucher
für unerfahrene SW-Entwickler einfacher als Interpretierer und Besucher
weiter
Struktur
Strukturdiagramm
weiter
Teilnehmer
  Container
abstrakte Klasse für alle Container
  Enumeration
abstrakte Klasse für die Aufzählung, die Iterator-Schnittstelle
  Container1
eine konkrete Implementierung eines Containers
implementiert Iterator-Erzeugungsfunktion(en)
  Enumeration1
die zu dem Container gehörige Iteratorklasse
weiter
Konsequenzen
viele Container-Operationen können allgemein für alle Container gemeinsam formuliert werden
in abstrakten Klassen Schablonenmethoden über Iterator-Objekte
die erzeugenden Funktionen für die Aufzählungen sind der einzige variable Teil in den Schablonenmethoden
für die Iteratoren werden zusätzliche Objekte benötigt
Effizienz?
mit foreach-Routinen manchmal eleganter und effizienter
keine zusätzlichen Objekte für den Iterator-Zustand
der Zustand im Iterator-Objekt ist nicht immer einfach zu verwalten
Beispiel: binärer Baum
der gesamte Pfad vom momentanen Knoten zur Wurzel zurück muss im Iterator verwaltet werden.
 
Beispiel aus Algorithmen und Datenstrukturen:
Iterator für Maps implementiert als binäre Suchbäume ab Zeile 670
Vorsicht: keine Änderung des Containers während der Iteration
weiter
merke
Effizienz-Fragen im Vergleich zur Strategie.
weiter
Implementierung
die Iteratoren lesen nur im Container
deshalb mehrere Iteratoren auf einem Container möglich
in der Literatur: stabile Iteratoren
Iteratoren, die auch noch "richtig" arbeiten, wenn der Container während der Iteration verändert wird
besser: nicht verwenden und nicht implementieren
Schnittstelle für die Iteratoren unterschiedlich breit
eine bis fünf Funktionen
Java: eine sehr einfache Schnittstelle
weiter
Beispiele
Java Beispiel für einen gefilterten Iterator implementiert mit Dekorierer-Muster
weiter
Bekannte Verwendungen
JDK1.1 java.util.Enumeration Klasse
weiter
verwandte Muster
sind für rekursive Datenstrukturen besser geeignet als Iteratoren
im Entwurfsmuster-Buch: Einschätzung falsch
weiter
foreach-Routinen mit Kommandos als Parameter sind effizienter
weiter

Letzte Änderung: 03.01.2017
© Prof. Dr. Uwe Schmidt
Prof. Dr. Uwe Schmidt FH Wedel