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 :

Delegation mis en application


Sujet :

C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 27
    Par défaut Delegation mis en application
    BOn alors encore une question vocabulaire :

    LA delegation :

    COmme d'ahbitude recherche sur le net et tt ce qui va donc j'en fait profiter pour ceux qui ne connaissent pas (pk pas l ajouter a la faq):

    # La délégation

    La délégation est une relation de type "a un" entre deux objets. Elle intervient lorsque deux objets collaborent entre eux. Ce type de relation se décompose en trois parties :


    * L'association : elle consiste à une simple relation de collaboration entre deux objets. Chaque objet existe de manière totalement indépendante, et n'a pas forcément besoin de l'autre pour "vivre". La relation entre un téléphone portable et son kit main-libre est une relation d'association.
    * L'agrégation : elle se distingue de l'association par le fait qu'un objet est une partie de l'autre. Ainsi, un bouton sur un téléphone portable a une relation d'agrégation avec le téléphone. Si une certaine touche n'est pas présente, le téléphone peut néanmoins fonctionner, en paliant ce manque par des combinaisons d'autres touches.
    * La composition : elle est une sous-partie de la relation d'agrégation. Elle représente une relation étroite entre les deux objets : l'objet "père" ne peut fonctionner sans l'objet "fils". L'objet "batterie" ou "micro" d'un téléphone portable ont une relation de composition avec le téléphone, car le téléphone ne peut pas fonctionner sans.


    NB : Dans le doute du type de relation à utiliser, il vaut mieux utiliser l'association

    ----------

    Bon voila que ma question arrive :

    Si on veux faire herite une classe A avec une classe B c'est basique :
    Class B : private -public - protected Class A

    Maintenant comment s'ecrit la delegation de deux classe ?
    merci d avance

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 29
    Par défaut
    Pour une aggrégation (ou composition dailleurs), Je dirais que les propriétés membres privées de ta classe B, comporteront par exemple un pointeur sur un objet de ta classe A :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Class A;
     
    Class B {
     
    private :
     
    A* obj_a;
     
    public :
     
    //
     
    }
    Voila, à confirmer lol

  3. #3
    Membre expérimenté Avatar de BertrandA
    Inscrit en
    Août 2003
    Messages
    170
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 170
    Par défaut
    Pour une aggrégation (ou composition dailleurs), Je dirais que les propriétés membres privées de ta classe B, comporteront par exemple un pointeur sur un objet de ta classe A
    Ben non c'est exactement le contraire. Dans le cas de la composition, la durée de vie des 2 objets est intimement liée : la destruction de l'un entraîne la destruction de l'autre. L'exemple que tu donnes est une association.
    La composition c'est ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    class A
    {};
     
    class B
    {
        A a;
    };
    M'enfin je dis tellement de bêtises des fois...

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 27
    Par défaut
    C'est a dire declarer en dehors de tout public ou private ???

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 29
    Par défaut
    Euh Bertrand oui tu as sans doute raison pour la composition ; mais pour une aggrégation, les 2 objets ne sont pas intimement liés.

  6. #6
    Membre chevronné
    Avatar de bigquick
    Profil pro
    Inscrit en
    Août 2002
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 356
    Par défaut
    Salut,

    Ah bah j'étais en train de répondre quand j'ai vu que BetrandA avait posté une réponse .... donc je confirme ta réponse

    En général (je précise ça parcequ'on peut surement trouver des exemples tordus ),
    Agrégation = "par référence" (par exemple un pointeur membre vers une instance de A)
    Composition = "par valeur" (par exemple une variable membre de type A a part entière)

    (et pour la nouvelle remarque qui vient d'apparapitre, si si il faut préciser public/protected/private Normalement, ca serait private, mais tu peux très bien les mettre en public si tu ne veux pas t'embéter avec des accesseurs....

    L'important, c'est de noter que la composition ne se traduit pas par un pointeur, et donc que le composant est automatique créé (resp. détruit) avec la création (resp. destruction) du composite.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 29
    Par défaut
    ok bigquick, comme ca c'est clair

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 27
    Par défaut
    Bigquick peux tu me donner un exemple codé stp.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 29
    Par défaut
    Agrégation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    class A;
     
    class B {
    private :
               A* ptr_a;
     
    public :
             // 
     
    };

    Composition :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    class A;
     
    class B {
    private :
               A obj_a;
     
    public : 
              //
    };

  10. #10
    Membre chevronné
    Avatar de bigquick
    Profil pro
    Inscrit en
    Août 2002
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 356
    Par défaut
    pas mieux

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 27
    Par défaut
    Lool Bah merci ...

    Pour ca c regler ..

    Est ce possible d avoir le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    Class A : public A  //ui ui pas fait de faute :p
    {
     
    B *obj;
     
    public : 
    ...
    };

  12. #12
    Membre chevronné
    Avatar de bigquick
    Profil pro
    Inscrit en
    Août 2002
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 356
    Par défaut
    Euhhh, ou veux-tu en venir ? (enfin à quoi ça servirait, si c'était possible ?)

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 27
    Par défaut
    Bon alors jme lance lol

    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
     
     
    Class AlgoDep
    {
    public :
    virtual int calcul() = 0 ;
    virtual ~AlgoD();
    };
     
    Class AlgoFuite
    {
    public :
    virtual ~AlgoFuite();
    virtual int calcul();
    };
     
    Class AlgoAttak
    {
    public :
    virtual ~AlgoAttak();
    virtual int calcul()
    }
     
    Class Pacman
    {
    public :
    void deplace();
    }
    On veut creer deux pacman un qui fuit un qui attak en utilisant un heritage privée.
    En sachant que le deplacement se fait en utilisant la fonction calcul de la classe corespondante :

    On arrive donc a ca :

    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
     
    class PacFuite : public Pacman; private AlgoFuite
    {
    public :
    void deplace()
    {
    ....
    AlgoFuite::calcul()
    ....
    }
    };
     
    class PacAttak : public Pacman , private AlgoAttak
    {
    public :
    void deplace()
    {
    ....
    AlgoAttak::calcul();
    ....
    }
    };
    Donc jusque la 0 probleme

    L'ennuie arrive.

    En utilisant la delegation , il n'existe maintenant qu une seule classe pour reprensenter les pacmans qui fuient et les pacman qui attaquent ..
    Ecrire le fichier Pacman.h , et les codes des constructeurs et la fonction membre deplace().

    Dc a partir de la je C pas comment realisé ca sachant que la delegation n'est nullement clair .. enfin c mieux now

    VOila pour le probleme complet si vous avez des suggestions je prends

  14. #14
    Membre chevronné
    Avatar de bigquick
    Profil pro
    Inscrit en
    Août 2002
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 356
    Par défaut
    Alors avec de la délégation, je te propose quelquechose qui s'approche du pattern state ():




    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Pacman  ------------> 1  Algo
                              ^
                              |
                        ------------
                        |            |
                  AlgoFuit       AlgoAtak
    Algo possède une méthode virtual void Algo::action()=0, qui est redéfinie par ses 2 filles pour fuire ou attaquer.

    Ensuite, ton pacman possède donc une associtaion ou aggrégation vers Algo:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class Pacman
    {
         Algo*    m_pAlgo;
     
         void deplace()
         {
                ...
                m_pAlgo->action();
         }
    };

    Et là, l'intéret du state c'est de pouvoir changer d'état, par exemple une méthode de Pacman du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    void Pacman::changer(MODE _e)
    {
       switch(_e)
       {
              ... en fonction du mode on instancie un algo différent
              (sans oublier de deleter l'ancien)
       }
    }
    ou sinon tu peux avoir la méthode Algo::action() qui te retourne un mode: ainsi, c'est l'algo d'attaque, si il se sent menacé, qui demande à passer en mode fuite.

    T'en penses quoi ?

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 27
    Par défaut
    Bah j en penses que c du tres joli travail

    Ca me comble de joie et je vote pour :p

    Bon plus serieusement c vraiment niquel et l explication qui va avec est egalement parfaite ...

    Je serais admin je taperais dans tte c explications pour rajouter cette definition a la FAQ

    MErci Beaucoup pour ces explications

  16. #16
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 292
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    struct A {...};
    struct A1 : A {...};
     
    struct B {
        B() : a1_(new A1(toto)) {}
     
        void reset(P p) {
            a2_.reset(new A1(p));
        }
     
    private:
        std::auto_ptr<A> const a1_;
        boost::scoped_ptr<A>   a2_;
    };
    C'est la notion des durées de vie qui compte. Pas le comment on le met en oeuvre. La composition existe aussi dans les langages qui ne supportent pas directement la notion de valeur.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 27
    Par défaut
    Bah ma foi c noté /

    j ai u droit a de superbes reponses aujourdhui

    Msr l 'admin j insiste faite une ptite rubrique en plus pour la delegation dans votre faq y a plus qu a faire du C/C :p


    mErci All

  18. #18
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Msr l 'admin j insiste faite une ptite rubrique en plus pour la delegation dans votre faq y a plus qu a faire du C/C :p
    Même si c'est intéressant, je ne pense pas que ce genre d'explications concernant la modélisation ait sa place dans la FAQ C++ .

    D'autant plus qu'on possède de très bons cours concernant l'UML ou les design patterns.

  19. #19
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 27
    Par défaut
    Lol :p
    bah j aurais essayé lool

  20. #20
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    J'y peut voir un intérêt dans une FAQ C++, dans le sens uniquement où il est évoqué comment le vocabulaire OO/UML se traduisait en vocabulaire C++.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 12/08/2013, 18h50
  2. Réponses: 0
    Dernier message: 10/07/2009, 00h30
  3. Accès à une application ouverte (OLE Automation ?)
    Par PascalB dans le forum C++Builder
    Réponses: 6
    Dernier message: 17/06/2002, 14h39
  4. [Kylix] Execution d'une application hors de l'edi
    Par Sadam Sivaller dans le forum EDI
    Réponses: 1
    Dernier message: 20/04/2002, 23h22
  5. Réponses: 2
    Dernier message: 15/04/2002, 12h56

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