La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Iterator Design Pattern Alessandro Soro Sylvain Giroux.

Présentations similaires


Présentation au sujet: "Iterator Design Pattern Alessandro Soro Sylvain Giroux."— Transcription de la présentation:

1 Iterator Design Pattern Alessandro Soro Sylvain Giroux

2 Plan But et Motivation Structure et implémentation Exemple Conclusion Références

3 But et motivation Problèmes – Fournir une façon de parcourir un objet aggrégé de manière indépendante de son implémentation. – Permettre différents parcours des objets aggrégés – Fournir une interface uniforme pour parcourir diverses structures aggrégées, Supporter l’itération polymorphique Solution – Extraire la responsabilité pour les accès et les parcours et la donner à un objet iterator.

4 Structure

5 Participants Aggregate: – Interface standard pour créer les objets Iterator. ConcreteAggregate: – Implémente createIterator() qui rend une instance de l’itérateur concret (ConcreteIterator). Iterator: – Définit une interface pour accéder et parcourir les éléments. ConcreteIterator: – Implémente Iterator, connaît les détails interne de ConcreteAggregate.

6 Problèmes d’implémentation Qui contrôle l’itération? – le client  external iterator – iterator  internal iterator Où est défini l’algorithme de parcours? – dans Iterator  solution la plus commune, il est ainsi facile d’avoir plus qu’une technique de parcours – Dans l’aggrégat  Iterator ne conserve que l’état de l’itération (cursor) Accès concurrent aux objets aggregate. – Un itérateur qui permet des modifications parallèles sans faire une copie de la structure est dit robuste Opérations supplémentaires – Previous() – SkipTo(); Index() – Remove(); Replace()

7 Exemple public abstract class AbstractList extends AbstractCollection implements List { private class Itr implements Iterator { //voir page suivante } public int size() {... } abstract public Object get(int index); public Iterator iterator() { return new Itr(); }

8 Exemple private class Itr implements Iterator { int cursor = 0; int lastRet = -1; int expectedModCount = modCount; public boolean hasNext() { return cursor != size(); } public Object next() { try {Object next = get(cursor); checkForComodification(); lastRet = cursor++; return next; } catch(IndexOutOfBoundsException e) { checkForComodification(); throw new NoSuchElementException(); }... }

9 Exemple private class Itr implements Iterator {.... public void remove() { if (lastRet==-1) throw new IllegalStateException(); checkForComodification(); try { AbstractList.this.remove(lastRet); if (lastRet<cursor) cursor--; lastRet=-1; expectedModCount=modCount; } catch (IndexOutOfBoundsException e) { throw new ConcurrentModificationException(); } private final void checkForComodification() { if (modCount != expectedModCount) throw new ConcurrentModificationException(); }

10 Exemple d’utilisation java.util.Collection c = new java.util.ArrayList(); c.add(new String("uno")); c.add(new String("due")); c.add(new String("tre")); java.util.Iterator i = c.iterator(); while (i.hasNext()) { System.out.println(i.next().toString()); }

11 Conclusion Usages connus – interface java.util.Enumerator. – interface Java 2 Collections Framework Iterator Iterators – Similar to the familiar Enumeration interface,Enumeration – but more powerful, and with improved method names. – Iterator – Iterator In addition to the functionality of the Enumeration interface, allows the user to remove elements from the backing collection with well defined, useful semantics. – ListIterator – ListIterator Iterator for use with lists. In addition to the functionality of the Iterator interface, supports bi-directional iteration, element replacement, element insertion and index retrieval.

12 Conclusion Patrons de conception reliés – Factory method  itérateurs polymorphiques – Composite  pour parcours récursivement des structures composites – Visitor  pour appliquer une opération à chaque membre d’une structure – Memento  pour sauver l’état d’une itération

13 Références Design Patterns: Elements of Reusable Object-Oriented Software Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides The Iterator Pattern Design Patterns In Java Bob Tarr http://www.research.umbc.edu/~tarr/cs491/lectures/Iterator-2pp.pdf The collection framework – http://java.sun.com/j2se/1.5.0/docs/guide/collections /index.html http://java.sun.com/j2se/1.5.0/docs/guide/collections /index.html


Télécharger ppt "Iterator Design Pattern Alessandro Soro Sylvain Giroux."

Présentations similaires


Annonces Google