Java Reference
In-Depth Information
Der Aufbau einer Datenstruktur ist für die Anwendung irrelevant, solange die Anwen-
dung zum Traversieren der Datenstruktur einen Iterator benutzt. Als Symbol für alle
möglichen Datenstrukturen enthält das Klassendiagramm eine Klasse Datenstruk-
tur . Zum besseren Verständnis des Musters muss aber die Funktionsweise eines
Iterators gezeigt werden. Dazu wird zunächst eine sehr einfache Datenstruktur ver-
wendet. Wie im Klassendiagramm in Bild 4-56 zu sehen ist, aggregiert die Klasse
Datenstruktur eine Menge von Elementen beispielsweise in Form eines Arrays.
Die Klasse Element steht hier stellvertretend für weitere Elementklassen, die von der
Klasse Element abgeleitet sind. Die Klasse Element ist somit die Basisklasse aller
Klassen, deren Objekte in der Datenstruktur vorkommen können. Diese Forderung
ergibt sich daraus, dass die Methode next() im Interface IIterator als Ergeb-
nistyp den Typ Element hat.
Eine Anwendung - hier Client genannt - nutzt das Interface IIterator . Er kann aber
dadurch auf Grund des liskovschen Substitutionsprinzips jeden konkreten Iterator nut-
zen, dessen Klasse das Interface IIterator implementiert und dessen Verträge ein-
hält.
Das Interface IDatenstruktur definiert den Kopf einer Methode erzeugeItera-
tor() . Diese Methode muss in jeder Datenstruktur implementiert werden und einen
zu der Datenstruktur passenden Iterator an den Aufrufer zurückliefern. Bei der Metho-
de erzeugeIterator() handelt es sich um eine Fabrikmethode (siehe Kapitel
4.18).
Die Datenstruktur selbst muss keine Methoden zum Traversieren zur Verfügung stel-
len, sondern muss nur einen passenden Iterator anbieten. Der Iterator übernimmt die
Aufgabe der Traversierung. Dadurch dass die Aufgabe der Traversierung aus der Da-
tenstruktur herausgezogen wird ( Separation of Concerns ), wird die Implementierung
der Datenstruktur vereinfacht. Wie das Klassendiagramm in Bild 4-56 zeigt, sind aller-
dings die Klasse Datenstruktur und die Klasse KonkreterIterator stark gekop-
pelt. Dafür muss der Client den Aufbau der Datenstruktur nicht kennen und muss sich
nicht mehr um die Art und Weise der Traversierung der Datenstruktur kümmern.
Wie bereits erwähnt wurde, gibt es Datenstrukturen, bei denen verschiedene Traver-
sierungsarten und damit verschiedene Iteratoren zum Einsatz kommen können. In die-
sem Falle kann die Methode erzeugeIterator() parametrisiert werden, damit ein
Client über den Parameter den gewünschten Iterator auswählen kann. Alternativ kann
eine Datenstruktur auch mehrere Methoden zum Erzeugen von Iteratoren zur Verfü-
gung stellen. Hierauf wird im Folgenden nicht weiter eingegangen.
4.17.3.2 Teilnehmer
IIterator
Das Interface IIterator definiert eine Methode next() zum Traversieren und zum
Zugriff auf die Elemente der Datenstruktur sowie eine Methode hasNext() zum Über-
prüfen der Existenz eines nächsten Elements.
Search WWH ::




Custom Search