Präsentation herunterladen
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
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.