Patrons de conception : Iterator. Patrons de conception. Problèmes récurrents. Patron de conception



Documents pareils
Patrons de Conception (Design Patterns)

Plan. Patrons de conception. Motivations. Design Pattern : principe. Philippe Collet

Le développement d'applications informatiques

Analyse,, Conception Objet

Logiciel Libre Cours 3 Fondements: Génie Logiciel

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

Cours en ligne Développement Java pour le web

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

Le génie logiciel. maintenance de logiciels.

Bases de données et environnements distribués Chapitre I : Architecture logicielle technologies de developpement en environnement

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

CNAM cours NFE107 : Urbanisation et architecture des SI Xavier Godefroy, Rapport sur le BPM, mai Le BPM

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

Description de la formation

Programme «Analyste Programmeur» Diplôme d état : «Développeur Informatique» Homologué au niveau III (Bac+2) (JO N 176 du 1 août 2003) (34 semaines)

Modélisation UML. Christine Solnon INSA de Lyon - 3IF 1/140.

Architectures Ouvertes pour l Adaptation des Logiciels

SECTION 5 BANQUE DE PROJETS

Entraînement au concours ACM-ICPC

Évaluation et implémentation des langages

Programmation Orientée Objet

UML. Diagrammes de classes (suite) Delphine Longuet.

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)

Plateforme de capture et d analyse de sites Web AspirWeb

openarchitectureware & transformation de modèle Yannick Lizzi Architecte Logiciel itemis France Mail: lizzi@itemis.de

Chapitre VI- La validation de la composition.

Modélisation de Lignes de Produits en UML *

IFT785 Approches Orientées Objets. FINAL Été Remise : Jeudi 19 août 2002 à 9h00 am

Vérifier la qualité de vos applications logicielle de manière continue

Évaluation expérimentale de l application de la théorie «Vision-Compréhension» aux patrons de conception

Rapport de Synthèse. Création d un Générateur de modèle PADL pour le langage C++ Sébastien Colladon

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2

Générer du code à partir d une description de haut niveau

Analyse et Conception objet du logiciel Analyse et conception objet du logiciel : Méthode de conception objet et notation UML.

Analyse,, Conception des Systèmes Informatiques

Architecture N-Tier. Ces données peuvent être saisies interactivement via l interface ou lues depuis un disque. Application

Chapitre 2. Classes et objets

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

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

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

La programmation orientée objet et le langage C++

Développement mobile MIDP 2.0 Mobile 3D Graphics API (M3G) JSR 184. Frédéric BERTIN

LOG4430 : Architecture logicielle et conception avancée

L enseignement de méthodes agiles dans un contexte d apprentissage actif

LICENCE : INFORMATIQUE GENERALE

Java et les bases de données: JDBC: Java DataBase Connectivity SQLJ: Embedded SQL in Java. Michel Bonjour

Approche méthodologique pour la modélisation des processus de l entreprise

Java c est quoi? Java pourquoi?

Cours 1 : La compilation

Débuter avec EXPRESS. Alain Plantec. 1 Schema 2

NSY102. Conception de logiciels Intranet Introduction

Développement d un interpréteur OCL pour une machine virtuelle UML.

Package Java.util Classe générique

AJAX. (Administrateur) (Dernière édition) Programme de formation. France, Belgique, Suisse, Roumanie - Canada

TP1 : Initiation à Java et Eclipse

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

Projet Active Object

1. Développement embarqué. André KPOZEHOUE DOMAINES DE COMPETENCES CONNAISSANCES TECHNIQUES

C++ COURS N 2 : CLASSES, DONNÉES ET FONCTIONS MEMBRES Classes et objets en C++ Membres d'une classe Spécification d'une classe Codage du comportement

4. Groupement d objets

Gestion mémoire et Représentation intermédiaire

Introduction au Génie Logiciel

Génie Logiciel Avancé Cours 1 Introduction

Proposition d une architecture pour ebay, en mettant l accent sur les notions de scalabilité, de résilience, et de tolérance aux pannes.

Formation : Modélisation avec UML 2.0 et Mise en pratique

Programme scientifique Majeure INTELLIGENCE NUMERIQUE. Mentions Image et Réalité Virtuelle Intelligence Artificielle et Robotique

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

CATALOGUE FORMATIONS DOMAINE Bases de données

Types d applications pour la persistance. Outils de développement. Base de données préexistante? 3 modèles. Variantes avec passerelles

Génie logiciel avec UML. Notions sur le langage UML adapté pour les cours du programme Techniques de l informatique

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

LANGAGUE JAVA. Public Développeurs souhaitant étendre leur panel de langages de programmation

Big Data et Graphes : Quelques pistes de recherche

Cours de Java. Sciences-U Lyon. Java - Introduction Java - Fondamentaux Java Avancé.

MODELISATION DES RESEAUX EN ALTARICA 3.0 MODELING NETWORK SYSTEMS WITH ALTARICA 3.0

IFT2255 : Génie logiciel

Feature Team Primer. par Craig Larman et Bas Vodde. Version 1.2

Opérations de base sur ImageJ

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

Cahier Technique. «Développer une application intranet pour la gestion des stages des étudiants» Antonin AILLET. Remi DEVES

basée sur le cours de Bertrand Legal, maître de conférences à l ENSEIRB Olivier Augereau Formation UML

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Diplôme Européen de III ème cycle en Systèmes d'information!"" #!$%& ' (

Jacques Lonchamp. Conception. d applications en Java/JEE. Principes, patterns et architectures

Introduction aux concepts d ez Publish

Rapport projet MMI. Luis Domingues, I3 Naomi Favre, I3 Tiago De Deus, I3. Luis Domingues, Tiago De Deus, Naomi Favre SP Interfaces Multimodales

Intervention: Pauvreté et Acces à la Justice

LOG4430 : Architecture logicielle et conception avancée

INTERSYSTEMS CACHÉ COMME ALTERNATIVE AUX BASES DE DONNÉES RÉSIDENTES EN MÉMOIRE

Brève introduction à la recherche d!information sur le Web à base d!agents logiciels

Scratch : programmation objet facile pour tous

CQP Développeur Nouvelles Technologies (DNT)

Guide de l'utilisateur de l'utilitaire d'installation de caméra Avigilon

Conception d'un système d'information WEB avec UML Par Ass SERGE KIKOBYA

INF2015 Développement de logiciels dans un environnement Agile. Examen intra 20 février :30 à 20:30

Formula Negator, Outil de négation de formule.

Rebol, un langage «différent»

Introduction à la conception de systèmes d information

Transcription:

Patrons de conception : Iterator Théorie et pratique de la programmation Michel Schinz 203-03-25 Patrons de conception 2 Problèmes récurrents En programmation, comme dans toute discipline, certains problèmes sont récurrents. Un programmeur expérimenté sait identifier de tels problèmes, et connaît généralement leur solution. Pourquoi ne pas répertorier ces problèmes et leur solution, afin de faciliter le travail des programmeurs? Patron de conception Un patron de conception (design pattern) est une solution à un problème de conception récurrent. Un tel modèle est nommé et décrit en détail dans un répertoire de modèles p.ex. le célèbre livre Design Patterns, Elements of Reusable Object-Oriented Software de Gamma, Helm, Johnson et Vlissides. 3 4

Exemple : itérateur Composants d'un patron Problème récurrent : un objet possède une collection de valeurs et désire y donner accès, sans révéler la manière dont cette collection est représentée en interne. Solution (modèle de conception Iterator) : fournir un itérateur, à savoir un objet qui permet d examiner les valeurs les unes après les autres, dans un ordre donné. Les principaux composants d un patron sont : son nom, une description du problème résolu, une description de la solution à ce problème, une présentation des conséquences liées à l utilisation du patron. 5 6 Avantages des patrons Inconvénients des patrons Les patrons de conception permettent de diffuser largement les meilleures solutions connues à différents problèmes récurrents. De plus, ces solutions sont nommées, ce qui permet de raisonner et de communiquer à un plus haut niveau d abstraction que lorsqu on se concentre sur les détails de mise en œuvre. Malgré la récente excitation liée à leur «découverte», les patrons de conception ne sont pas une panacée. Une utilisation systématique des motifs ne saurait garantir qu un programme soit bien conçu. Il est donc important de n utiliser un patron que lorsque cela est justifié, et que les avantages liés à son utilisation compensent les inconvénients p.ex. l augmentation de la complexité du programme qui en résulte fréquemment. 7 8

Patrons et langages Un patron de conception n est normalement pas lié à un langage de programmation donné. Toutefois, beaucoup de patrons ont été inventés dans le contexte de langages orienté-objets. Ils font une utilisation intensive des concepts de ce type de langages classes, objets, polymorphisme d inclusion, etc. et sont donc difficilement utilisables dans d autres contextes. Il faut aussi noter que certains langages possèdent des concepts qui rendent modèles de conception obsolètes! Par exemple, le langage Scala possède le filtrage de motifs (pattern matching) qui rend l'utilisation du modèle Visitor inutile. Patron n : Iterator (ou Cursor) 9 0 Illustration du problème Solution Une classe représentant une liste d éléments doit fournir un moyen de parcourir ces éléments les uns après les autres. Une possibilité serait d exposer la représentation interne au client p.ex. en rendant la classe des nœuds visible dans le cas des listes chaînées. Mais on violerait alors l encapsulation. Comment faire? Pour permettre le parcours des éléments d une liste sans exposer sa représentation interne, on peut utiliser un objet qui désigne à tout moment un élément de la liste. Cet objet possède des opérations permettant d obtenir l élément désigné et de passer à l élément suivant, voire au précédent. Un tel objet s appelle un itérateur, ou un curseur. 2

Généralisation Le concept d itérateur peut être utilisé chaque fois qu un objet possède une collection d éléments qu un client doit pouvoir parcourir sans connaître la représentation interne de la collection. Exemples : parcours du contenu d un répertoire dans un système de fichiers, parcours des résultats d une requête à une base de données, etc. Diagramme de classes Le diagramme de classes ci-dessous illustre les classes et interfaces impliquées dans l ajout d une notion d itérateur à une classe imaginaire Aggregate, contenant une collection d éléments. Iterator<E> boolean hasnext() E next AggregateIterator Aggregate Iterator<T> iterator() 3 4 Raffinements Type de parcours Les itérateurs présentés ici sont très simples. Selon les besoins, on peut imaginer les augmenter avec des méthodes permettant de : passer à l élément précédent, aller au début ou à la fin de la collection, supprimer ou ajouter des éléments à la position désignée par l itérateur, etc. Les itérateurs définis sur les listes jusqu'à présent effectuent un parcours du premier au dernier élément. On peut imaginer d autres sortes de parcours, p.ex. en sens inverse. Pour des structures de données plus complexes p.ex. les arbres les possibilités sont plus nombreuses : en largeur ou profondeur d abord, en pré-ordre, post-ordre, etc. Chacun de ces types de parcours peut être mis en œuvre par un itérateur différent. 5 6

Intérêt du patron Iterator Exemples réels Un itérateur permet de parcourir les éléments d une collection en faisant abstraction de sa représentation. Ainsi, on peut écrire exactement le même code pour parcourir les éléments d un ensemble représenté par un arbre de recherche que ceux d une liste représentée par chaînage. Il est même possible de définir des itérateurs sur des structures infinies, p.ex. la liste des nombres premiers! La bibliothèque Java utilise des itérateurs représentés par l interface java.util.iterator pour permettre le parcours des collections : listes, ensembles, etc. La bibliothèque STL de C++ fait de même. 7 8 Résumé Un patron de conception est une solution, nommée et documentée, à un problème de conception récurrent. Un bon programmeur se doit de connaître un certain nombre de patrons importants et de savoir quand les utiliser. Le premier patron examiné, Iterator, permet à un objet généralement une collection de donner accès à ses éléments sans révéler la manière dont ils sont stockés en interne. 9