• Keine Ergebnisse gefunden

Entwurfsmuster - Iterator

N/A
N/A
Protected

Academic year: 2022

Aktie "Entwurfsmuster - Iterator"

Copied!
16
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Einf¨uhrung Schritte zum Pattern nach GAMMA Zweck Implementierung Verwandte Muster

Entwurfsmuster - Iterator

Jens Spinner (279215)

HTWG Konstanz

7. Mai 2009

(2)

Einf¨uhrung Schritte zum Pattern nach GAMMA Zweck Implementierung Verwandte Muster

Muster Klassifikation

objektbasiertes Verhaltensmuster

Zweck des Patterns

Erm¨ogliche den sequentiellen Zugriff auf die Elemente eines zusammengestzten Objekts, ohne seine zugrundeligende Repr¨asentation offenzulegen.

Iteration?

v. lat. iterare “wiederholen”

Jens Spinner (279215) Entwurfsmuster - Iterator

(3)

Einf¨uhrung Schritte zum Pattern nach GAMMA Zweck Implementierung Verwandte Muster

ose Trennung polymorphe Iteratoren Fabrikmethode

Abbildung:ose Klasse

(4)

Einf¨uhrung Schritte zum Pattern nach GAMMA Zweck Implementierung Verwandte Muster

ose Trennung polymorphe Iteratoren Fabrikmethode

1. Trennung des Traversierungsmechanismus

Trennung des Traversierungsmechanismus vom Listenobjekt. Es besteht eine Kopplung.

Abbildung: iterator Klassendiagramm

Verbessernung

Trennung erm¨oglicht es, Iteratoren f¨ur unterschiedliche

Traversierungsarten zu erstellen ohne die Listenschnittstelle zu vergr¨oßern.

Jens Spinner (279215) Entwurfsmuster - Iterator

(5)

Einf¨uhrung Schritte zum Pattern nach GAMMA Zweck Implementierung Verwandte Muster

ose Trennung polymorphe Iteratoren Fabrikmethode

2. erweiterung polymorphe Iteratoren

Einf¨uhrung einer AbstraktListe und AbstrakIterator Schnittstelle.

Dadurch kann auf die Liste und den Iterator einheitlich zugegriffen werden.

Abbildung: iterator Klassendiagramm

(6)

Einf¨uhrung Schritte zum Pattern nach GAMMA Zweck Implementierung Verwandte Muster

ose Trennung polymorphe Iteratoren Fabrikmethode

3. erweiterung um Fabrikmethode

“Da wir nur solchen Code schreiben wollen, der von den konkreten Unterklassen unabh¨angig ist, k¨onnen wir kein Objekt einer

bestimmten Unterklasse erzeugen. Statt dessen machen wir die Listenobjekte daf¨ur zust¨andig, ihre entsprechenden Iteratoren zu erzeugen.” [GAMMA]

Abbildung: iterator Klassendiagramm

Jens Spinner (279215) Entwurfsmuster - Iterator

(7)

Einf¨uhrung Schritte zum Pattern nach GAMMA Zweck Implementierung Verwandte Muster

Wozu?

um auf element zugreifen, ohne interne Struktur offenzulegen um auf verschieden Arten zu traversieren

um zu vermeiden, dass durch verschiedene Traversierungsarten die Schnittstelle z.B.: einer Listenklasse aufgebl¨aht wird (vorw¨arts, r¨uckw¨arts...)

um eine einheitliche Schnittstelle zur Traversierung zu erhalten (polymorphie)

um mehrfach zu traversieren

(8)

Einf¨uhrung Schritte zum Pattern nach GAMMA Zweck Implementierung Verwandte Muster

Teilnehmer Extern vs. Intern Robustheit Nulliterator

Iterator

definiert eine Schnittstelle zum Zugriff auf und zur Traversierung von Elementen

KonktreterIterator

implementiert die Schnittstelle von Iterator

verwaltet die aktuelle Position w¨ahrend der Traversierung des Aggregats

Aggregat

definiert eine Schnittstelle zum Erzeugen eines Objekts der Klasse Iterator

KonkretesAggregat

implementiert die Operation zum Erzeugen eines konkreten Iterators, in dem es ein Objekt der passenden

KonkreterIterator-Klasse zur¨uckgibt [GAMMA]

Jens Spinner (279215) Entwurfsmuster - Iterator

(9)

Einf¨uhrung Schritte zum Pattern nach GAMMA Zweck Implementierung Verwandte Muster

Teilnehmer Extern vs. Intern Robustheit Nulliterator

Extern

Wenn der Klient die Iteration Steuert. Klienten m¨ussen die Traversierung selbst vorantreiben.

Intern

Wenn der Iterator die Iteration Steuert.

(10)

Einf¨uhrung Schritte zum Pattern nach GAMMA Zweck Implementierung Verwandte Muster

Teilnehmer Extern vs. Intern Robustheit Nulliterator

externer Iterator - Klientensicht

for (Iterator i = c.iterator(); i.istFertig(); ){ . Typ elem = (Typ) i.next();

}

erweitertes for:

for (Typ elem : c) ...

Jens Spinner (279215) Entwurfsmuster - Iterator

(11)

Einf¨uhrung Schritte zum Pattern nach GAMMA Zweck Implementierung Verwandte Muster

Teilnehmer Extern vs. Intern Robustheit Nulliterator

class MyObjectHandler implements ObjectHandler { public void handle(Object o) {

System.out.println(o);

} }

// - Klientensicht

Object[] myList = new Object[] {new Integer(1), new Integer(2), new Integer(3)};

MyObjectIterator iterator = new MyObjectIterator(myList);

iterator.print();

iterator.apply(new MyObjectHandler());

[WIKIPEDIA]

(12)

Einf¨uhrung Schritte zum Pattern nach GAMMA Zweck Implementierung Verwandte Muster

Teilnehmer Extern vs. Intern Robustheit Nulliterator

Problem

Wenn Element dem Aggregat hinzugef¨ugt oder entfernt werden, kann es passieren, dass ein Element doppelt gelesen oder verpasst wird

L¨osung

Bsp.: registrieren des Iterators beim Aggregat - Zustandsanpassung des Iterators (Beobachtermuster - Iterator ist Beobachter,

Aggregat das Subjekt)

Jens Spinner (279215) Entwurfsmuster - Iterator

(13)

Einf¨uhrung Schritte zum Pattern nach GAMMA Zweck Implementierung Verwandte Muster

Teilnehmer Extern vs. Intern Robustheit Nulliterator

Was?

degenerierter Iterator, der f¨ur die Handhabung von

Grenzbedingungen n¨utzlich ist. Nulliterator ist immer am “Ende”

(IstFertig immer TRUE).

Anwendung

Blattelemente geben Nulliterator zur¨uck.

(14)

Einf¨uhrung Schritte zum Pattern nach GAMMA Zweck Implementierung Verwandte Muster

Verwandtschaft Vergleich

Kompositum

Iteratoren werden oft auf rekursive Strukturen wie Komposita angewendet.

Fabrikmethode

Polymorphe Iteratoren st¨utzen sich auf Fabrikmethoden ab, um ein Objekt der richtigen Iteratorunterklasse zu erzeugen.

Memento

Ein Iterator kann ein Memento benutzen, um den Zustand einer Iteration zwischenzuspeichern. Der Iterator speichert das Memento dann intern.

Jens Spinner (279215) Entwurfsmuster - Iterator

(15)

Einf¨uhrung Schritte zum Pattern nach GAMMA Zweck Implementierung Verwandte Muster

Verwandtschaft Vergleich

Iterator Pattern ¨ahnlich dem Memento Pattern in der Art, wie sie ein Aggregatobject kapseln. Diese Muster ziehen den Zustand aus dem Objekt heraus und verwalten diesen mit ihrer Logik.

[LASATER]

(16)

Einf¨uhrung Schritte zum Pattern nach GAMMA Zweck Implementierung Verwandte Muster

Verwandtschaft Vergleich

Entwurfsmuster, GAMMA

Design Patterns, Christopher Lasater Wikipedia

ENDE

Jens Spinner (279215) Entwurfsmuster - Iterator

Referenzen

ÄHNLICHE DOKUMENTE

kann das Verhalten von Adaptee nicht direkt ¨ andern (nur ¨ uber die Verwendung einer Subklasse von Adaptee)....

Direktor informiert Erbauer wenn Teile des Produkts erbaut werden sollen. Erbauer arbeitet Anfrage des Direktors ab und f¨ ugt Teile dem

• Lösungsgerüst für eine spezielle Anwendungsdomäne, das die generelle Architektur und Struktur der Software vorgibt, und das durch konkrete Spezialisierungen zu einem

I Zeitbedarf beim Laden statt bei erster Benutzung → weder besser noch schlechter, nur anders... I potentieller Nachteil: Klassenladereihenfolge

I AbstractFactory: stellt Schnittstelle zum einheitlichen Erzeugen der konkreten Produktobjekte dar → typischerweise als Interface implementiert. I ConcreteFactory:

I Zweck: Definiere Methode zum Erzeugen von Objekten in abstrakter Klasse, ¨ uberlasse Erzeugung den konkreten Subklassen.. I auch bekannt als:

I klassenbasierte Strukturmuster verwenden dazu Vererbung in den beiden Auspr¨ agungen Schnittstellenvererbung und Implementierungsvererbung. I objektbasierte Strukturmuster

a placeholder object (proxy) that provides the same interface and that delegates operation calls to the actual subject.. I Applicability: Common reasons to hide a subject behind a