Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Entwurfsmuster – Iterator

Ähnliche Präsentationen


Präsentation zum Thema: "Entwurfsmuster – Iterator"—  Präsentation transkript:

1 Entwurfsmuster – Iterator
Gina Puzic Der Iterator ist ein Verhaltensmuster. Er ist sowohl Klassen wie auch Objektbasiert.

2 Übersicht Entwurfsmuster
Aufgabe Erzeugung-smuster Struktur-muster Verhaltensmuster Gültigkeits-bereich klassen-basiert Fabrikmethode Adapter Interpreter Schablonen-methode objekt-basiert Abstrakte Fabrik Erbauer Prototyp Singleton Adapter Brücke Dekorierer Fassade Fliegenge-wicht Kompositum Proxy Befehl Beobachter Besucher Iterator Momento Strategie Vermittler Zustand Zuständigkeits-kette Iterator auch bekannt als Cursor. compound=Zusammensetzung(Mischen) Entwurfsmuster Iterator

3 Zweck Zugriffsmöglichkeit auf eine Sammlung von
Daten, ohne dass die darunter liegende Datenstruktur offengelegt wird. Iterator auch bekannt als Cursor. Bsp.Eine Liste von Objekten sollte die Möglichkeit bieten auf ihre Elemente zuzugreifen ohne ihre interne Struktur offenzulegen. Entwurfsmuster Iterator

4 Motivation Verschiedene Traversierungsalgorithmen auf eine Datenstruktur (z.B. Liste) anwenden können ohne ihre Schnittstelle aufblähen zu müssen. Die Datenstruktur zur selben Zeit mehrfach traversieren können. Die Aggregationsklasse ändern können ohne den Klientcode ändern zu müssen. Verschiedene Traversierungsalgorithmen auf eine Datenstruktur (z.B. Liste) anwenden können ohne ihre Schnittstelle aufblähen zu müssen. Die Datenstruktur zur selben Zeit mehrfach traversieren können. Die Aggregationsklasse ändern können ohne den Klientcode ändern zu müssen. Entwurfsmuster Iterator

5 return new KonkreterIterator(this)
Strukturdiagramm ErzeugeIterator() Aggregat KonkretesAggregat Start() Weiter() IstFertig() AktuellesElement() Iterator KonkreterIterator return new KonkreterIterator(this) Externer Iterator=Iteration vom Klient gesteuert erhöht die Flexibilität. Wird vom Klient gesteuert. Interner Iterator=Iteration vom Iterator selbst gesteuert. Verbirgt die Ausführung der Iteration vom Klient. ErzeugeIterator(): ähnlich wie virtueller Konstruktor(Fabrikmethode), da diese Methode ein Objekt erzeugt und zurückgibt. Entwurfsmuster Iterator

6 Teilnehmer Iterator KonkreterIterator Aggregat KonkretesAggregat
Definiert Schnittstelle für Zugriff und Travesierung von Elementen ConcreteIterator Implementiert Iterator-Schnittstelle Aggregate Definiert eine Schnittstelle zur Erzeugung eines Iterator-Objektes ConcreteAggregate Implementiert die Iterator-Kreationsroutine und gibt eine Instanz von ConcreteIterator zurück Entwurfsmuster Iterator

7 Beispiel: Liste Trennung des Traversierungsalgorithmus vom
Listenobjekt. Liste Anzahl() HaengeAn(Element) Entferne(Element) ….. liste ListenIterator Start() Weiter() IstFertig() AktuellesElemtent() Index Entwurfsmuster Iterator

8 Beispiel: Liste Polymorphe Iteratoren (Iteration vom Klient gesteuert)
Aggregat ErzeugeIterator() Anzahl() HaengeAn(Element) Entferne(Element) Klient Iterator Start() Weiter() IstFertig() AktuellesElement() Externer Iterator=Iteration vom Klient gesteuert erhöht die Flexibilität. Wird vom Klient gesteuert. Interner Iterator=Iteration vom Iterator selbst gesteuert. Verbirgt die Ausführung der Iteration vom Klient. Liste ListenIterator SkipListe SkipListenIterator Entwurfsmuster Iterator

9 Beispielcode public interface Iterator{ public boolean hasNext()
//Liefert true, falls noch weitere Elemente //verfügbar public Object next() //Liefert das nächste Element zurück public void remove() //Löscht das zuletzt mit next() abgerufenen //Element } Entwurfsmuster Iterator

10 Beispielcode import java.util.*; public class Beispiel {…
//Füllen einer Liste ArrayList list=new ArrayList(); for(int i=0;i<5;i++){ list.add(i); } Entwurfsmuster Iterator

11 Beispielcode … Iterator it=list.iterator(); while(it.hasNext()){
//Löschen von Elementen mit dem Iterator Iterator it=list.iterator(); while(it.hasNext()){ String s=(String) it.next(); if(s=="abc"){ it.remove(); } Entwurfsmuster Iterator

12 Beispielcode … while(it.hasNext()){
//Ausgeben aller Elemente while(it.hasNext()){ System.out.println((String) it.next()); } Entwurfsmuster Iterator

13 Robustheit des Iterators
Probleme beim Ändern des Aggregats während der Traversierung. Lösung 1: Kopieren des Aggregats  zu teuer Lösung 2: Einen robusten Iterator verwenden z.B. Benutzung des Observer Patterns Ein Hauptproblem: Der Iterator zeigt auf ein Element, das gelöscht wird. Entwurfsmuster Iterator

14 Umsetzung mit Observer
Aggregat = Subjekt Iterator = Beobachter Änderung des Aggregats: Iterator wird benachrichtigt die update-Methode wird aufgerufen Probleme in Sprachen ohne Garbage Collector: Iterator muss vom Stack gelöscht (delete) werden Entwurfsmuster Iterator

15 Literaturverzeichnis
Entwurfsmuster: Elemente wiederverwendbarer objektorientierter Software Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides. Entwurfsmuster Iterator


Herunterladen ppt "Entwurfsmuster – Iterator"

Ähnliche Präsentationen


Google-Anzeigen