Patron: Iterator (Itérateur)



Documents pareils
Programmation Par Objets

Package Java.util Classe générique

Programmer en JAVA. par Tama

Java Licence Professionnelle CISII,

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Auto-évaluation Programmation en Java

4. Groupement d objets

Corrigé des exercices sur les références

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

Lambda! Rémi Forax Univ Paris-Est Marne-la-Vallée

Chapitre 10. Les interfaces Comparable et Comparator 1

Threads. Threads. USTL routier 1

as Architecture des Systèmes d Information

Java 1.5 : principales nouveautés

Une introduction à Java

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

Chapitre V. Les classes : Object, Vector, etc.

Programmation Orientée Objet

OpenPaaS Le réseau social d'entreprise

ACTIVITÉ DE PROGRAMMATION

P r ob lé m a t iq u e d e la g é n é r icit é. Pr in cip e d e la g é n é r icit é e n Ja v a ( 1 /3 )

Programmation Réseau. Sécurité Java. UFR Informatique jeudi 4 avril 13

Généralités sur le Langage Java et éléments syntaxiques.

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Remote Method Invocation Les classes implémentant Serializable

API04 Contribution. Apache Hadoop: Présentation et application dans le domaine des Data Warehouses. Introduction. Architecture

La persistance des données dans les applications : DAO, JPA, Hibernate... COMPIL 2010 francois.jannin@inp-toulouse.fr 1

TD3: tableaux avancées, première classe et chaînes

Design patterns. Design patterns - définition. Design patterns - avantages

Cours 1: Java et les objets

Introduction. Les méthodes. Les méthodes. Identité et égalité. Identité et égalité. La copie d'objets. Identité et égalité.

RAPID Prenez le contrôle sur vos données

Langage Java. Classe de première SI

Développement Logiciel

MapReduce. Malo Jaffré, Pablo Rauzy. 16 avril 2010 ENS. Malo Jaffré, Pablo Rauzy (ENS) MapReduce 16 avril / 15

Plan du cours. Historique du langage Nouveautés de Java 7

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Le passé composé. C'est le passé! Tout ça c'est du passé! That's the past! All that's in the past!

Objets et Programmation. origine des langages orientés-objet

Certificat Big Data - Master MAthématiques

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Programme Compte bancaire (code)

4. Outils pour la synchronisation F. Boyer, Laboratoire Lig

LOG4430 : Architecture logicielle et conception avancée

WEB page builder and server for SCADA applications usable from a WEB navigator

Synchro et Threads Java TM

Tutoriel d installation de Hibernate avec Eclipse

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Instructions Mozilla Thunderbird Page 1

Introduction à MapReduce/Hadoop et Spark

Utilisation d objets : String et ArrayList

Communication inter-processus (IPC) : tubes & sockets. exemples en C et en Java. F. Butelle

Utiliser Java sans BlueJ

Forthcoming Database

Le Product Backlog, qu est ce c est?

Création d une application JEE

PROGRAMMATION PAR OBJETS

Classe Interne, Anonyme & Enumération

Introduction au langage de programmation Java

Projet de programmation (IK3) : TP n 1 Correction

Contrôle d'accès Access control. Notice technique / Technical Manual

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Héritage presque multiple en Java (1/2)

Calcul Parallèle. Cours 5 - JAVA RMI

TD/TP PAC - Programmation n 3

Java Licence Professionnelle CISII,

Exercices sur SQL server 2000

Environnements de développement (intégrés)

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Par Laurent DESECHALLIERS. Mastère Spécialisé en Management de Projets en Milieu Industriel. CESI de Rouen Promotion 2002/2003.

Premiers Pas en Programmation Objet : les Classes et les Objets

Township of Russell: Recreation Master Plan Canton de Russell: Plan directeur de loisirs

Contents Windows

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

I. Programmation I. 1 Ecrire un programme en Scilab traduisant l organigramme montré ci-après (on pourra utiliser les annexes):

REMOTE DATA ACQUISITION OF EMBEDDED SYSTEMS USING INTERNET TECHNOLOGIES: A ROLE-BASED GENERIC SYSTEM SPECIFICATION

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Programmation en Java IUT GEII (MC-II1) 1

Introduction : les processus. Introduction : les threads. Plan

Cours Bases de données 2ème année IUT

Facultés Universitaires Notre-Dame de la Paix. Conception et Programmation Orientées- Object

Création d objet imbriqué sous PowerShell.

TD2 Programmation concurrentielle

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

MapReduce et Hadoop. Alexandre Denis Inria Bordeaux Sud-Ouest France ENSEIRB PG306

Corrigés des premiers exercices sur les classes

TD/TP PAC - Programmation n 3

Génération de code binaire pour application multimedia : une approche au vol

Présentation. Au programme. Fonctionnement. A l issue de ce module vous devriez...

Chapitre VI- La validation de la composition.

Exercices sur les interfaces

TP Programmation Java / JDBC / Oracle

TP1 : Initiation à Java et Eclipse

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Dis papa, c est quoi un bus logiciel réparti?

WiFi Security Camera Quick Start Guide. Guide de départ rapide Caméra de surveillance Wi-Fi (P5)

Transcription:

Patron: Iterator (Itérateur) http://www-public.telecom-sudparis.eu/~gibson/teaching/designpatterns/designpatterns-iterator.pdf

Un itérateur est un objet qui permet de parcourir tous les éléments contenus dans un autre objet, le plus souvent un conteneur (liste, arbre, etc). Un synonyme d'itérateur est curseur, notamment dans le contexte des bases de données. Un itérateur ressemble à un pointeur disposant essentiellement de trois primitives : accéder à l'élément pointé en cours (dans le conteneur), et se déplacer pour pointer vers l'élément suivant, et déterminer si l'itérateur a épuisé la totalité des éléments du conteneur. Le but d'un itérateur est de permettre à son utilisateur de parcourir le conteneur, tout en isolant l'utilisateur de la structure interne du conteneur, potentiellement complexe. Le plus souvent l'itérateur est conçu en même temps que la classe-conteneur qu'il devra parcourir, et ce sera le conteneur lui-même qui créera et distribuera les itérateurs pour accéder à ses éléments.

Différences avec l'indexation On utilise souvent un index dans une simple boucle, pour accéder séquentiellement à tous les éléments d'un tableau Cette approche reste possible en programmation objet pour certains conteneurs, mais l'utilisation des itérateurs a certains avantages: Un simple compteur dans une boucle n'est pas adapté à toutes les structures de données Avec les itérateurs, le code est plus lisible, réutilisable, et robuste Un itérateur peut implanter des restrictions additionnelles sur l'accès aux éléments Un itérateur peut dans certains cas permettre que le conteneur soit modifié, sans être invalidé pour autant.

Itérateur: Java Example using enumerations (legacy code) import java.util.*; public class IteratorExample1 { private static void traverse(enumeration e) { while (e.hasmoreelements()) { System.out.println(e.nextElement()); // main() // Create a Vector and add some items to it. // Traverse the vector using an Enumeration. // Now create a hash table and add some items to it. // Traverse the hash table keys using an Enumeration. // Traverse the hash table values using an Enumeration. 2013 (Design Patterns) J Paul Gibson Iterator.4

Itérateur: Java Example using enumerations (legacy code) public static void main(string args[]) { // Create a Vector and add some items to it. Vector v = new Vector(); v.addelement(new Integer(5)); v.addelement(new Integer(9)); v.addelement(new String("Hi, There!")); // Traverse the vector using an Enumeration. Enumeration ev = v.elements(); System.out.println("\nVector values are:"); traverse(ev); // Now create a hash table and add some items to it. Hashtable h = new Hashtable(); h.put("bob", new Double(6.0)); h.put("joe", new Double(18.5)); h.put("fred", new Double(32.0)); // Traverse the hash table keys using an Enumeration. Enumeration ekeys = h.keys(); System.out.println("\nHash keys are:"); traverse(ekeys); // Traverse the hash table values using an Enumeration. Enumeration evalues = h.elements(); System.out.println("\nHash values are:"); traverse(evalues); 2013 (Design Patterns) J Paul Gibson Iterator.5

Itérateur: Java Example using enumerations (legacy code) TO DO: Execute the code and understand how it works Vector values are: 5 9 Hi, There! Hash keys are: Joe Bob Fred Hash values are: 18.5 6.0 32.0 2013 (Design Patterns) J Paul Gibson Iterator.6

Types d'itérateurs Les bibliothèques de certains langages poussent très loin le concept d itérateurs comme la STL (Standart Template Library) de C++. Les environnements de dernière génération comme Java ou.net ne sont pas en reste, ils proposent en standard de nombreuses collections et différents types d itérateurs pour les parcourir. On peut classifier les itérateurs selon le sens possible de déplacement : Itérateurs unidirectionnels : Déplacement en avant, c est le plus standard. Déplacement en arrière. Itérateurs Bi-directionnel : Déplacement avant-arrière Mais aussi selon le mode d accès aux données : -Itérateurs en lecture seule -Itérateurs en lecture/ecriture

Les collections (et Itérateurs sur collection ) en Java Java dispose de base d un riche ensemble de collections les Java Collections Framework- définis par de nombreuses classes et interfaces. Cet ensemble a été remis à neuf depuis la version 1.2 avec l introduction de plusieurs interfaces pour «abstraire» les conteneurs comme la liste. Les collections ont été unifiées et simplifiées autour de quelques classes et interfaces essentielles. Java met à disposition un itérateur standard basique (classe Iterator) pour parcourir les éléments d une collection (que dans un seul sens). Java propose aussi un itérateur plus élaboré (classe ListIterator) qui offre un parcours bi-directionnel du conteneur.

Exemple de parcours avec itérateur // création d une liste d éléments ArrayList persons = new ArrayList(); // remplir la liste d éléments Person p= new Person("john", "smith"); persons.add(p);... // demande un itérateur au conteneur Iterator i = persons.iterator(); // tant qu il un élément suivant dans la collection while(i.hasnext()) { // extrait (une référence sur) l élément suivant Person p= (Person)i.next(); // traite l élément extrait: l affiche p.print();

Exemple de parcours avec itérateur Version simplifiée plus concise pour le parcours des éléments, possible depuis java 1.5 : for(person p : persons) { p.print();

Iterable et iterator (interfaces) en Java En Java il y a 2 interfaces pour gérer les itérateurs : Iterable<Type> : indique que l objet est une collection qui peut être parcourue par un itérateur => création de l itérateur Iterator<Type> : indique que l objet est un itérateur => réalise le parcours

UML concrete iterator UML abstract/ concrete iterator

public class MyTableOfStrings implements Iterable<String> { protected String[] data; public MyTableOfStrings(String [] data) { this.data = data; public int length(){return data.length; public Iterator<String> iterator() { return new MyTableOfStrings_Iterator(this);

public class MyTableOfStrings_Iterator implements Iterator<String> { private int index; private MyTableOfStrings table; public MyTableOfStrings_Iterator(MyTableOfStrings tab) { index = tab.length()-1; table = tab; public String next() { index--; return table.data[index +1]; public boolean hasnext() { return index >= 0; public void remove() { throw new UnsupportedOperationException();

public class MyTableOfStrings_Test { public static void main(string[] s) { String [] data = {"one", "two", "three"; MyTableOfStrings t = new MyTableOfStrings(data); System.out.println("Iterate over original data array"); for (String value : data) { System.out.println(" "+value); System.out.println("\nIterate over same data in MyTableOfStrings"); for (String value : t) { System.out.println(" "+value);

TO DO : Compile and execute the test class

Random Iteration: Reservoir Sampling In the previous example we saw how the Iterator code decides the order in which to visit the elements. By default Java iterates through arrays from the 1st to the last elements. In the example we iterate through MyTableOfStrings in reverse order. TO DO: Change the iterator code so that the elements are visited in random order. Do not do this by shuffling the elements.

A more complex data structure: an urn/ballot box of bulletins/votes Your task is to iterate through the Strings in the Urn Look at the Urn_Test Code and write the Urn and Urn_Iterator classes appropriately. Check that the test, executed on your code, produces the expected results

public class Urn_Test { public static void main(string[] s) { String [] preferences1 = {"gibson", "smyth", "hughes"; MyTableOfStrings vote1 = new MyTableOfStrings( preferences1); String [] preferences2 = {"jones", "bell"; MyTableOfStrings vote2 = new MyTableOfStrings( preferences2); String [] preferences3 = {"raffy", "lallet"; MyTableOfStrings vote3 = new MyTableOfStrings( preferences3); MyTableOfStrings [] votes = { vote1, vote2, vote3; Urn urn = new Urn (votes); System.out.println("\nIterate over strings on bulletins in Urn"); for (String value : urn) {System.out.println(" "+value);