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 :

Appel d'une m�thode non partagee par toutes les sous classes


Sujet :

C++

  1. #1
    Membre confirm� Avatar de b Oo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    179
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 179
    Par d�faut Appel d'une m�thode non partagee par toutes les sous classes
    Bonjour,
    j'ai une hi�rarchie de classes de ce style
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
                                        A
                                    /       \
                                  B           E  
                              /      \      /   \
                            C          D   E1  E2         
                          /   \      /   \ 
                        C1     C2   D1  D2                                             
     
    A, B, E, C, D sont abstraites.
    C1,C2 sont les classes qui héritent de C et qui sont concretes
    de même pour D1, ...
    J'ai un conteneur monConteneur de A *. B poss�de une m�thode toto et E non.
    Je voudrais pour chaque �l�ment de monConteur appel� la m�thode toto si c'est un B.
    Existe t-il une m�thode propre de faire ceci ?
    Pour l'instant je ne vois que :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    pour tout les elément de monConteneur faire
       si classMereDeElementCourant = b alors
          appeler toto

  2. #2
    Expert confirm�
    Avatar de Luc Hermitte
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2003
    Messages
    5 296
    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 296
    Par d�faut
    Quand on veut r�aliser ce genre de choses, souvent, c'est que l'on a foir� son design.
    Sinon, un visiteur peut-�tre ?
    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...

  3. #3
    Membre confirm� Avatar de b Oo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    179
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 179
    Par d�faut
    Arf c'est bien ce que je craignais , ma conception n'est pas bonne.

    En fait B et E ne devrait pas etre des classes filles de A mais A devrait contenir des B et des E.

    Luc j'aimerais savoir s'il y a quelques r�gles pour choisir entre h�ritage et composition (lorsque les 2 solutions semblent envisageables).

    Je sais qu'il est recommand� de faire de la composition plut�t que de l'heritage lorsqu'on a le choix mais je ne sais pas vraiment pourquoi.

  4. #4
    Expert confirm�
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    D�cembre 2003
    Messages
    3 549
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : D�cembre 2003
    Messages : 3 549
    Par d�faut
    Bah c'est relativement simple.
    Si B est un sous-type de A alors tu d�rives. Sinon, non.

  5. #5
    Membre confirm� Avatar de b Oo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    179
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 179
    Par d�faut
    Par exemple si tu as une classe Personne.
    Si je fais une classe PersonneAgee et JeunePersonne.
    Tu fais un h�ritage ou une composition ?
    On peut le voir des 2 manieres non ?
    (tu vas me dire que tu fais de l'h�ritage)

  6. #6
    Expert confirm�
    Avatar de Luc Hermitte
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2003
    Messages
    5 296
    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 296
    Par d�faut
    Aucun des deux. Je stocke l'�ge et en aucun cas je ne sp�cialise cette classe de la sorte.
    Je ne te raconte pas la compl�xit� du changement de type d'une "grosse" entit� au fil de son �volution. jeune -> "..." -> ag�
    Je pr�f�re avoir un trait del'entit� qui au besoin changera de cat�gorie/type.

    Je pense que tu devrais utiliser un exemple moins g�n�rique.

    Le choix sinon ? Hum...
    * mod�lisation de la relation "est-un", mise en oeuvre d'une subtituabilit�, .. => h�ritage public
    * r�utilisation de code
    - couplage statique et fort acceptable => h�ritage priv�
    - sinon, 90% du temps => composition

    Pour les cas interm�diaires, cela d�pend. Toujours est-il que j'�vite au maximum l'h�ritage public quand le LSP (recherche avanc�e!) n'est pas recherch�, et qu'il ne peut pas �tre correctement mis en oeuvre.
    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...

  7. #7
    Membre confirm� Avatar de b Oo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    179
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 179
    Par d�faut
    Imaginons alors que j'ai une classe etreVivant.
    Je veux faire une classe Animal et une autre Vegetal.

    Un animal est un etre vivant de meme que vegetal donc ici je fais un h�ritage ?
    Les etres vivants sont compos�s d'animaux et de vegetaux, je fais une composition ?

  8. #8
    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 : 51
    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
    L�, tu as un article diff�rent :

    Un animal est UN etre vivant de meme que vegetal donc ici je fais un h�ritage ?
    LES etres vivants sont compos�s d'animaux et de vegetaux, je fais une composition ?

    Si tu as une classe qui repr�sente UN �tre vivant, et une classe qui repr�sente UN animal, je ne vois pas trop quelle composition tu veux faire.

    Peut-�tre que les �l�ments trouvable sur http://archive.eiffel.com/doc/manual...c/acrobat.html pourront te donner des id�es plus claires (en particulier Using inheritance well) ?
    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.

  9. #9
    Membre confirm� Avatar de b Oo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    179
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 179
    Par d�faut
    Euh oui d'accord,
    en plus ce qu j'ai ecrit est le pattern composite.
    La classe etre vivant qui a les 2 sous classes Animal et Vegetal
    et une classe EtresVivants qui contient des etreVivant.

  10. #10
    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 : 51
    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
    Pas vraiment. Le design pattern composite, dans ton cas, ce serait si tu avais un troisi�me type d'�tre "vivant", nomm� Colonie, par exemple, qui soit consid�r� comme un �tre vivant � part enti�re, qui naisse, vive, meurt, se reproduise... Et qui lui m�me soit compos� d'�tre vivants (des fourmis, des pucerons, des champignons... voire d'autre Colonies), d�finissant ainsi une hi�rarchie d'instances.

    Ce qui marque le composite, c'est cette classe qui d�rive de la classe de base et poss�de une collection d'�l�ments de la classe de base.
    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.

  11. #11
    Expert confirm�
    Avatar de Luc Hermitte
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2003
    Messages
    5 296
    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 296
    Par d�faut
    Une petite mise en garde. Les "est-un" de la vraie vie, ce sont pas forc�ment des "est-un" valides dans le paradigme objet. L'exemple typique est le carr� qui n'est pas un rectangle contrairement � ce que notre intuition nous dicte.

    Pour tes hi�rarchies de vivant, en quoi �tre vivant est important? Quel est le comportement que ces choses ont que les autres choses n'ont pas ?
    Tes exemples sont beaucoup trop g�n�riques et sujets � pinaillages pour que je puisse te donner une r�ponse d�finitive sur le comment je ferai.
    Le vivant, je risque plut�t de le casser en Comestible, Viellit et diverses autres choses (Interface/traits/...). Et pour la colonie de fourmies qui parrait vivante, tous ne seront pas forc�ment applicables.

    En fait, je n'aime pas trop m'appuyer sur ces mod�lisations de la r�alit�, car j'ai l'impression que l'on touche aux limites de la mod�lisation OO � base d'h�ritage. Une mod�lisation ne sera valide que dans le cadre de la finesse et du r�alisme dont on a vraiment besoin.
    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...

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Une m�thode non-support�e par OpenJDK ?
    Par PyNub dans le forum Langage
    R�ponses: 2
    Dernier message: 20/04/2013, 10h14
  2. Lister toutes les sous-classes d'un classe m�re
    Par Kerod dans le forum Langage
    R�ponses: 10
    Dernier message: 09/02/2009, 19h21
  3. R�ponses: 7
    Dernier message: 30/08/2007, 14h17
  4. [POO] appel d'une m�thode d'un autre fichier, le tout objet
    Par aaaaaaaa dans le forum G�n�ral JavaScript
    R�ponses: 5
    Dernier message: 13/07/2007, 18h43

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