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

  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
    Membre �prouv�
    Inscrit en
    Novembre 2006
    Messages
    1 073
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par d�faut
    En fait, j'ai r�solu le probl�me comme cela:

    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
    class Visite;
    class IVisiteur{
    public:
    	virtual void visite(Visite *v)=0;
    };
     
    class Visite{
    private:
    	int o;
     
    public:
    	Visite(int u):o(u){}
    	void fixe(int x){
    		o=x;
    	}
    	void accepte(IVisiteur* visiteur){
    		visiteur->visite(this);
    	}
    };
    class Visiteur:public IVisiteur{
    private:
    	int j;
    public:
    	Visiteur(int u):j(u){}
    void visite(Visite *visite){
    	visite->fixe(j);
    }
     
    };
    Je ne sais pas si c'est la meilleure solution, mais cela fonctionne

  8. #8
    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

  9. #9
    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
    Citation Envoy� par koala01 Voir le message
    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 )
    +1.
    D'o� ma r�ponse dans une de tes nombreuses autres questions.
    Tu cherches � comprendre comment c'est fait, avant que de comprendre pourquoi on l'utilise. Tu marches � l'envers !
    Personnellement, j'ai d�couvert le pattern Visiteur dans cette discussion pour r�soudre un probl�me tr�s pr�cis : hi�rarchie polymorphe et acc�s � des fonctions membres qui sont pas dans la classe de base.

    Du coup, tant que t'auras pas r�ellement rencontr� une vraie situation en code o� t'en as besoin, j'ai bien peur que tu ne l'int�gres pas vraiment ce pattern...

    D�sol� d'en remettre une couche, mais promis c'est la derni�re.
    deubelte, �a fait presque 4 ans ( )qu'on te voie sur DVP � poser des questions sur le C++ , et t'as toujours pas essay� un seul projet perso, si petit soit-il. Moi je dis, faut pas chercher plus loin l'origine des probl�mes. Je plussoie Koala sur la n�cessit� de l'apprentissage th�orique, mais l�, y'a comme un vide...
    En plus, je suis pas le premier � remarquer que tu mets la charrue avant les b�ufs sans vraiment chercher � comprendre
    C'est un exemple parmi n, suffit de se baisser pour en ramasser...

+ 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