20
Un visiteur… …venu d’ailleurs Whooooooooooooooo!! !

Un visiteur… …venu d’ailleurs

  • Upload
    dwight

  • View
    54

  • Download
    0

Embed Size (px)

DESCRIPTION

Un visiteur… …venu d’ailleurs. Whooooooooooooooo !!!. Sommaire. Classification Intention Motivation Utilisation Constituants Structure Collaboration Conséquence Considération d’implémentation Exemple d’implémentation Mini Projet. Classification. Comportemental – Objet - PowerPoint PPT Presentation

Citation preview

Page 1: Un visiteur…  …venu d’ailleurs

Un visiteur… …venu d’ailleursWhooooooooooooooo!!!

Page 2: Un visiteur…  …venu d’ailleurs

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

Page 3: Un visiteur…  …venu d’ailleurs

Classification• Comportemental – Objet

• Objet => Relation dynamique par composition• Un élément fait appel à un visiteur

• Comportemental => Collaborations, répartition des responsabilité

Page 4: Un visiteur…  …venu d’ailleurs

Intention

• Séparer et extraire les traitements appliquées à différents type de nœuds d’une structure

Page 5: Un visiteur…  …venu d’ailleurs

Motivation• Permet l’ajout de nouveaux types d’actions sur

les objets de la structure sans les modifier• Les actions divergent selon le type d’élément

de la structure• Exemple : Compilateur

• Parcours de l’arbre syntaxique• Traitement différent selon l’opérateur

Page 6: Un visiteur…  …venu d’ailleurs

Utilisation• Structure dont le nombre de types d’éléments

est peut variable• Structure sur laquelle on peut envisager

d’appliquer plusieurs type de traitements• Exemple :

• Système de fichiers• Compilateurs (variables, fonctions, opérateurs, …)• Liste de produits

Page 7: Un visiteur…  …venu d’ailleurs

Constituant(1/2)• Structure de l’objet

• Représente la structure des éléments• liste, Set, Composite - Arbre

• Visiteur• Interface• Définit les méthode de visite pour chaque classe concrète de la

structure• Elément

• Interface représentant les éléments constituant la structure de l’objet• Définit la méthode abstraite permettant l’appel au visiteur

Page 8: Un visiteur…  …venu d’ailleurs

Constituant(2/2)• Visiteur concret

• Implémente les opérations du Visiteur• Définit un contexte pour la visite et garde son état

local • Elément concret

• Implémente la méthode d’appel au visiteur• Se passe en paramètre à la bonne méthode du

visiteur

Page 9: Un visiteur…  …venu d’ailleurs

Structure

Page 10: Un visiteur…  …venu d’ailleurs

Collaboration

Page 11: Un visiteur…  …venu d’ailleurs

Conséquence• Avantages

– Facile de rajouter de nouvelles opération (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

Page 12: Un visiteur…  …venu d’ailleurs

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ême 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.

Page 13: Un visiteur…  …venu d’ailleurs

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é

Page 14: Un visiteur…  …venu d’ailleurs

Exemple d’implémentation(1/6)Description

• Eléments :• Chambre à coucher• WC• Cuisine• Salon• …

• Visiteurs :• Ménagère• Peintre• Décorateur• Voleurs

Page 15: Un visiteur…  …venu d’ailleurs

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

class Class Mo...

Toilettes

+ accept(Visiteur) : voidTerrasse

+ accept(Visiteur) : voidSallon

+ accept(Visiteur) : voidSalleDeBain

+ accept(Visiteur) : void

Piece

+ accept(Visiteur) : void+ getName() : String+ getSize() : Dimension+ setSize(Dimension) : void

ChambreACoucher

+ accept(Visiteur) : voidBureau

+ accept(Visiteur) : void

Menagere

+ visit(Bureau) : void+ visit(ChambreACoucher) : void+ visit(SalleDeBain) : void+ visit(Sallon) : void+ visit(Terrasse) : void+ visit(Toilettes) : void

«interface»Visiteur

+ visit(Bureau) : void+ visit(ChambreACoucher) : void+ visit(SalleDeBain) : void+ visit(Sallon) : void+ visit(Terrasse) : void+ visit(Toilettes) : void

Voleur

+ getNbObjetsVoles() : int+ visit(Bureau) : void+ visit(ChambreACoucher) : void+ visit(SalleDeBain) : void+ visit(Sallon) : void+ visit(Terrasse) : void+ visit(Toilettes) : void

Maison

1

Page 16: Un visiteur…  …venu d’ailleurs

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);}

Page 17: Un visiteur…  …venu d’ailleurs

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");    }

}

Page 18: Un visiteur…  …venu d’ailleurs

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++;

    }

}

Page 19: Un visiteur…  …venu d’ailleurs

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);    }}

Page 20: Un visiteur…  …venu d’ailleurs

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