Un visiteur… …venu d’ailleurs

Slides:



Advertisements
Présentations similaires
La programmation orientée objet avec Java L3-MIAGE Plan
Advertisements

Cours n° 7 Standard Template Library II.
Approfondissement du langage
JAV - TD 6 Structures de données JAVA
TD 1 IJA Introduction Objet, méthode, attribut Classe, instance
Programmation Orientée Objet (POO)
Introduction à la POO: Les classes vs les objets
بسم الله الرحمن الرحيم. Institut Supérieure des Etudes Technologiques de Kébili.
Chapitre III Héritage (début)
Principes de programmation (suite)
Structures collectives en Java
Programmation orientée objet
Introduction à la programmation (420-PK2-SL) cours 12 Gestion des applications Technologie de linformation (LEA.BW)
Les méthodes en java Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. Une méthode pour être utilisée.
Langage Oriente Objet Cours 4.
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
© 2007 P. Van Roy. All rights reserved. FSAB1402: Informatique 2 Le Langage Java et les Exceptions Peter Van Roy Département dIngénierie Informatique,
77 Utilisation des classes (suite). 7-2 Objectifs A la fin de ce cours, vous serez capables de : Définir des méthodes surchargées dans une classe Fournir.
Standard Template Library (STL)
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 5 – Héritage, Interfaces et Listes génériques.
Structures de données IFT Abder Alikacem La classe vector Édition Septembre 2009 Département dinformatique et de génie logiciel.
Structures de données IFT-2000
Structures de données IFT-10541
Introduction au paradigme orienté-objet (suite)
Présentation Structures de Données et TDA
P. Van Roy, LINF1251 LINF1251: Le Langage Java Peter Van Roy Département dIngénierie Informatique, UCL
Design Pattern: Decorator
Chapitre 9 Les sous-programmes.
Types de données abstrait et mécanismes d'encapsulation
COURS DE PROGRAMMATION ORIENTEE OBJET :
Standard Template Library
C++ : fonctions et opérateurs
CSI1502 Principes fondamentaux en conception des logiciels
Leçon 1 : notion dobjet IUP Génie Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.
Structures de données IFT-2000
Intention Séparer les traitements appliquées à différents type de nœuds d’une structure à l’algorithme de parcours.
Intention Séparer et extraire les traitements appliquées à différents type de nœuds d’une structure.
Folder in depth Programme de statistique et de recherche de fichiers Jonas Berdoz Marjolaine Steiner Julien Tissot.
4 Introduction des objets. Les chaînes et tableaux
La notion de type revisitée en POO
Proposition pour un modèle à grains extrêmement fins David Fauthoux directeur : Jean-Paul Bahsoun IRIT.
11/04/ L'héritage Cours 7 Cours 7.
Programmation objet La base.
Cours 7 Classes locales Clonage Divers: tableaux.
Un visiteur… …venu d’ailleurs Whooooooooooooooo!!!
Master 1 SIGLIS Java Lecteur Stéphane Tallard Les erreurs communes en Java.
Arbres binaires et tables de hachage
Cours C++ Fonctions Surcharge d’opérateurs Passage d’arguments
© 2005 P. Van Roy. All rights reserved. FSAB1402: Informatique 2 Le Langage Java Peter Van Roy Département d’Ingénierie Informatique, UCL
Tutorat en bio-informatique
Constructeurs H Batatia. Variable statique Une variable statique est partagée par tous les objets d’une classe.
C# de plus près.  Ce sont globalement les mêmes que Java : ◦ Int(int16, int32), float, double, bool,…  Les classe « communes » sont également les mêmes.
Cours du 5 novembre.
Héritage H. Batatia. plan Notion (que signifie l’héritage) Ecriture en java Héritage multiple (interdit) Instanciation (partie propre et partie héritée)
Iterator Design Pattern Alessandro Soro Sylvain Giroux.
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
Introduction à la programmation objet avec java
Programme de statistique et de recherche de fichiers Jonas Berdoz Marjolaine Steiner Julien Tissot.
IUT du limousin L.U.P Michel Vergnaud Programmation Objet - Java.
Généricité.
22 Concepts de base du langage Java. 2-2 Objectifs A la fin de ce cours, vous serez capables de : Identifier les éléments essentiels de Java Identifier.
Conception de Programmes - IUT de Paris - 1ère année Les classes Introduction Déclaration d’une classe Utilisation d’une classe Définition des.
Retour sur les interfaces Les méthodes définies dans une interface sont des méthodes qui doivent absolument être implémentées par une ou des sous-classes.
Un visiteur… …venu d’ailleurs Whooooooooooooooo!!!
Spécialisation covariante cours et TP. Plan  Introduction  Rappels théoriques  Définition de la covariance  Présentation du modèle servant d'exemple.
Transcription de la présentation:

Un visiteur… …venu d’ailleurs Whooooooooooooooo!!! Jonas Berdoz, Marjolaine Steiner, Julien Tissot

Sommaire Classification Intention Motivation Utilisation Constituants Structure Collaboration Conséquence Considération d’implémentation Exemple d’implémentation Mini Projet

Classification Comportemental – Objet Objet => Relation dynamique par composition Un élément fait appel à un visiteur Comportemental => Collaborations, répartition des responsabilités

Intention Séparer et extraire les traitements appliqués à différents types de nœuds d’une structure

Motivation Les actions divergent selon le type d’élément de la structure Permet l’ajout de nouveaux types d’actions sur les objets de la structure sans les modifier Exemple : Compilateur Parcours de l’arbre syntaxique Traitement différent selon l’opérateur

Utilisation Structure dont le nombre de types d’éléments est peut variable Structure sur laquelle on peut envisager d’appliquer plusieurs types de traitements Exemple : Système de fichiers Compilateurs (variables, fonctions, opérateurs, …) Liste de produits

Constituant(1/2) Structure de l’objet Visiteur Élément Représente la structure des éléments liste, Set, Composite - Arbre Visiteur Interface Défini les méthodes de visite pour chaque classe concrète de la structure Élément Interface représentant les éléments constituant la structure de l’objet Défini la méthode abstraite permettant l’appel au visiteur

Constituant(2/2) Visiteur concret Élément concret Implémente les opérations du Visiteur Défini un contexte pour la visite et garde son état local Élément concret Implémente la méthode d’appel au visiteur Se passe en paramètre à la bonne méthode du visiteur

Structure

Collaboration

Conséquence Avantages Désavantage Facile de rajouter de nouvelles opérations (visiteur) Le visiteur peut garder des états des éléments. On ne doit ainsi pas les passer en argument. Les algorithmes de traitement d’un élément ne sont pas dans sa classe => meilleure séparation Désavantage Difficile de rajouter de nouveaux éléments => il faut changer chaque visiteur => violation OCP L’encapsulation est limitée, car il faut laisser les méthodes d’accès en public dans l’élément

Considération d’implémentation(1/2) Chaque élément concret a une méthode associée dans le visiteur. Rigueur dans la nomenclature, confusion Une classe par nœuds, lourd si les nœuds ont les mêmes propriétés. Déclaration des accesseurs obligatoires(attribut public) pour les nœuds, afin d’accéder au contexte du nœud depuis le visiteur.

Considération d’implémentation(2/2) Double dispatch Surcharge de la méthode accept avec le visiteur Surcharge de la méthode visit avec le type nœud Qui traverse la structure La structure de l’objet Collection, Composite Le visiteur Parcours dupliqué par visiteur Parcours complexe Itérateur séparé

Exemple d’implémentation(1/6) Description Eléments : Chambre à coucher WC Cuisine Salon … Visiteurs : Ménagère Peintre Décorateur Voleurs

Exemple d’implémentation(2/6) Schéma UML

Exemple d’implémentation(3/6) Visiteur public interface Visiteur {     void visit(Bureau p);     void visit(ChambreACoucher p);     void visit(SalleDeBain p);     void visit(Sallon p);     void visit(Terrasse p);     void visit(Toilettes p); }

Exemple d’implémentation(4/6) Ménagère public class Menagere implements Visiteur {     @Override     public void visit(Bureau p) {         System.out.println("Nettoie bureau");              }     @Override     public void visit(Toilettes p) {         System.out.println("Nettoie les toilettes");     } }

Exemple d’implémentation(5/6) Voleur public class Voleur implements Visiteur {          private int nbObjetsVoles;          public int getNbObjetsVoles() {         return nbObjetsVoles;     }     @Override     public void visit(Bureau p) {         System.out.printf("%20s --> %s\n", p.getClass().getSimpleName()," Vol l'ordinateur");         nbObjetsVoles++;     }     @Override     public void visit(Toilettes p) {         System.out.printf("%20s --> %s\n", p.getClass().getSimpleName()," Vol la brosse");         nbObjetsVoles++;     } }

Exemple d’implémentation(6/6) Principal public static void main(String[] args) {     int nbPieces = 10;     List<Piece> pieces = new LinkedList<Piece>();     Visiteur visiteur = new Menagere();          String[] typePieces ={"Bureau", "ChambreACoucher", "SalleDeBain", "Sallon", "Terrasse",             "Toilettes"};          // Generation d'une maison aléatoire     for (int i = 0; i < nbPieces; i++) {         pieces.add(newPieceAleatoire(typePieces));     }          // Afficher la structure de la maison     System.out.println("Pieces : ");     for (Piece p : pieces) {         System.out.println("  - " + p.getName());     }     System.out.println();          // Action sur la maison     for (Piece p : pieces) {         p.accept(visiteur);     } }

Mini Projet Programme de gestion d’un système de fichier Les éléments: Dossiers Liens Fichiers Les visiteurs: Statistique d’un dossier Copie des fichiers respectant une expression régulière