Télécharger la présentation
1
Un visiteur… …venu d’ailleurs
Whooooooooooooooo!!! Jonas Berdoz, Marjolaine Steiner, Julien Tissot
2
Sommaire Classification Intention Motivation Utilisation Constituants
Structure Collaboration Conséquence Considération d’implémentation Exemple d’implémentation Mini Projet
3
Classification Comportemental – Objet
Objet => Relation dynamique par composition Un élément fait appel à un visiteur Comportemental => Collaborations, répartition des responsabilités
4
Intention Séparer et extraire les traitements appliqués à différents types de nœuds d’une structure
5
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
6
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
7
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
8
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
9
Structure
10
Collaboration
11
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
12
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.
13
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é
14
Exemple d’implémentation(1/6) Description
Eléments : Chambre à coucher WC Cuisine Salon … Visiteurs : Ménagère Peintre Décorateur Voleurs
15
Exemple d’implémentation(2/6) Schéma UML
16
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); }
17
Exemple d’implémentation(4/6) Ménagère
public class Menagere implements Visiteur { public void visit(Bureau p) { System.out.println("Nettoie bureau"); } public void visit(Toilettes p) { System.out.println("Nettoie les toilettes"); } }
18
Exemple d’implémentation(5/6) Voleur
public class Voleur implements Visiteur { private int nbObjetsVoles; public int getNbObjetsVoles() { return nbObjetsVoles; } public void visit(Bureau p) { System.out.printf("%20s --> %s\n", p.getClass().getSimpleName()," Vol l'ordinateur"); nbObjetsVoles++; } public void visit(Toilettes p) { System.out.printf("%20s --> %s\n", p.getClass().getSimpleName()," Vol la brosse"); nbObjetsVoles++; } }
19
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); } }
20
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
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.