IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Design Pattern Visitor et Decorateur


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par défaut Design Pattern Visitor et Decorateur
    Bonjour

    Je voudrais savoir si le décorateur, telle qu'il est défini ici:
    http://come-david.developpez.com/tut...=Decorateur#LV

    correspond au visitor, défini ici:

    http://en.wikipedia.org/wiki/Visitor_pattern

    merci

  2. #2
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    Euh, nan qu'est ce qui te fait penser à ca ?


    D'ailleurs, cet article est en cours de ré-écriture profonde, il est à prendre avec précaution.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  3. #3
    Membre éprouvé
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par défaut
    le fait qu'il est écrit:

    In object-oriented programming and software engineering, the visitor design pattern is a way of separating an algorithm from an object structure it operates on.
    Un décorateur, c'est pour moi un pattern pour lequel on va définir des algorithmes qui vont s'appliquer à plusieurs objets, mais de types différents.

    C'est ce qu'il me semblait comprendre en lisant le wikipedia.

    Sinon, qu'est-ce qu'un visiteur?

  4. #4
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Les deux patterns ont des objectifs différents.

    Le visiteur permet de parcourir une série d'éléments et d'invoquer, pour chacun, des comportements déterminés.

    Le décorateur permet quant à lui de rajouter des comportements à un objet
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  5. #5
    Membre éprouvé
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par défaut
    j'ai essayé de codé moi-même un pattern visiteur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    class Visiteur;
     
    class Visite{
    private:
    	int o;
     
    public:
    	Visite(int u):o(u){}
    	void fixe(int x){
    		o=x;
    	}
    	void accepte(Visiteur* visiteur){
    		visiteur->visite(this);
    	}
    };
    class Visiteur{
    private:
    	int j;
    public:
    	Visiteur(int u):j(u){}
    void visite(Visite *visite){
    	visite->fixe(j);
    }
     
    };
    int main(){
    	Visiteur visteur(4);
    	Visite visite(3);
     
    	visite.accepte(&visteur);
     
    }

    Je ne sais pas si cela peut-être considéré comme un pattern visiteur, mais je ne comprends pas pourquoi le compilateur me renvoie comme erreur:

    error C2027: use of undefined type 'Visiteur'

    alors que j'ai bien utilisé une déclaration anticipée de la classe visiteur.
    merci

  6. #6
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Quand tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    visiteur->visite(this);
    T'as besoin de connaitre le type. La déclaration anticipée marche pas.

  7. #7
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    c'est parce que tu dois attendre que la classe visiteur soit définie avant de définir la fonction accepte (vu que tu tente d'accéder à une fonction membre de visiteur )

    De plus, le pattern visiteur est particulièrement intéressant quand tu te trouve face à une hiérarchie polymorphe, afin de t'assurer que le comportement adapté est bel et bien invoqué.

    Il n'a que peu d'intérêt si c'est pour invoquer des comportements non polymorphes (car on estime que la fonction que l'on voudra appeler fait partie... de l'interface publique de l'objet )
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec le design pattern visitor
    Par RT222 dans le forum Langage
    Réponses: 5
    Dernier message: 13/05/2012, 20h28
  2. Design pattern Visitor & double dispatching
    Par f56bre dans le forum Langage
    Réponses: 5
    Dernier message: 24/03/2010, 11h22
  3. [GOF] quel design pattern: Visitor, Strategy ou commande???
    Par smartCoder dans le forum Design Patterns
    Réponses: 4
    Dernier message: 15/01/2008, 14h10
  4. [Curiosité] design pattern visitor et compilation
    Par krokmitaine dans le forum C++
    Réponses: 6
    Dernier message: 10/11/2006, 15h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo