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 habitué 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
    Points : 185
    Points
    185
    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 éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 279
    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 279
    Points : 11 015
    Points
    11 015
    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 ?

  3. #3
    Membre habitué 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
    Points : 185
    Points
    185
    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
    Points : 4 625
    Points
    4 625
    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 habitué 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
    Points : 185
    Points
    185
    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 éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 279
    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 279
    Points : 11 015
    Points
    11 015
    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.

  7. #7
    Membre habitué 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
    Points : 185
    Points
    185
    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 : 49
    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
    Points : 16 213
    Points
    16 213
    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) ?

  9. #9
    Membre habitué 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
    Points : 185
    Points
    185
    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 : 49
    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
    Points : 16 213
    Points
    16 213
    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.

  11. #11
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 279
    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 279
    Points : 11 015
    Points
    11 015
    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.

+ 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