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 :

derivation ou composition ?


Sujet :

C++

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    309
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 309
    Points : 148
    Points
    148
    Par défaut derivation ou composition ?
    Salut,

    Ce n'est pas la premiere fois que je me pose la question mais je n'y ai jamais apporte de reponse pertinante :

    J'ai une classe A qui n'a aucun membre ou methode protected. J'ai besoin d'en utiliser les methodes public dans une classe B. Dois-je deriver B de A ou dois-je simplement declarer une instance de A dans B ? Pourquoi ?

  2. #2
    Membre expérimenté Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Points : 1 544
    Points
    1 544
    Par défaut
    en fait rouge.















    Bon, pas compris en fait, ca manque de précision, que fait A, que fait B, comment/pourquoi A a besoin de B... comme ca on ne peux pas t'en dire plus.

    P.S. : de plus, y aurai pas une section modelisation/conception ? les gens seraient plus aptes a te repondre.
    "vaste programme"

  3. #3
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    A décrit-elle une interface que B va exposer? Si oui: héritage.
    A fournit-elle un service que B va utiliser (mais qui sera masquer aux utilisateurs de B): alors composition et d'autant plus que A ne peut qu'une implémentation d'un service nécessité par B.
    C'est un peu rapide comme réponse et va aussi dépendre de ta conception. En fait, un peu plus de détails pour répondre plus assurément à la question seraient nécessaires.

  4. #4
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 330
    Points : 85
    Points
    85
    Par défaut
    La dérivation servirait uniquement si B "est une sorte" de A
    Apparemment ce n'est pas le cas.

    Ensuite tu as le choix entre :
    1- avoir un membre de B qui est un A (ou une référence sur A)
    2- instancier A à l'intérieur des méthodes B
    3- faire de A une classe statique qu'on peu appeler sans l'instancier dans B
    4- passer une instance de A en paramètre des méthodes de B qui l'utilise
    5- surement d'autres choses

    Je ferais :
    1 s'il existe un lien suffisamment fort entre A et B (du genre B a besoin de A à plusieurs reprises) avec une référence si A vis sa vie indépendamment de B, et une instance s'il y a un A par B.
    2 si B n'a besoin de A qu'une ou deux fois sans avoir de contexte
    3 si les méthodes de A sont d'ordre utilitaire et n'ont pas de notion de contexte d'autant plus si A est susceptible d'être utilisée par plusieurs classes.
    4 pourrait servir à faire en sorte que B puisse travailler avec différentes instances de A

  5. #5
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    Héritage public : EST-UN
    Composition : A-BESOIN-DE ou EST-IMPLEMENTE-EN-FONCTION-DE, etc...

    Beaucoup de personnes utilisent à tout va l'héritage public alors que dans une énorme proportion de situations, un héritage privé ou une composition suffisent.

    Je te conseille vivement le livre "Mieux programmer en C++" (ou encore mieux la version anglaise ici), livre qui a été tiré de Guru Of The Week, site sur lequel tu retrouveras les axes principaux de ce qui est dit dans le livre.

  6. #6
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 612
    Points
    30 612
    Par défaut
    Salut,

    La question qu'il faut te poser est :
    puis-je estimer qu'il est sémantiquement correct de dire que la classe B est une classe A "améliorée" (ou "spécialisée")
    Si tu peux décemment répondre oui à cette question (oui: un chien est un animal), tu peux envisager l'héritage.

    Si, par contre tu répond non à cette question (non, un véhicule n'est pas un moteur), mais que tu peux répondre oui à la question
    la classe B a-t-elle toutes les caractéristiques de la classe A
    (oui, un véhicule a les caractéristiques de son moteur), il est opportun de choisir l'agrégation (l'association si tu a la certitude que la classe a ne peut pas exister sans la classe B (quand B contiend A ) )
    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

  7. #7
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Attention avec le terme "amélioré" ... j'ai déjà vu des débutant faire hériter une classe Rectangle de Carré (ben oui... c'est un Carré amélioré... avec plus d'informations !).

    Donc en fait l'héritage (au sens propre du terme, concernant des *objets*, on ne parle pas ici d'implémentation) est obligatoirement une spécialisation.
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  8. #8
    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
    Le problème avec les formes géométriques, c'est que les cas les plus généraux nécessitent davantage d'informations.
    Boost ftw

  9. #9
    Membre régulier

    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 78
    Points : 105
    Points
    105
    Par défaut
    Citation Envoyé par loufoque Voir le message
    Le problème avec les formes géométriques, c'est que les cas les plus généraux nécessitent davantage d'informations.
    C'est la même chose avec la plupart des objets mathématiques (cf entier vs réel).

    Et c'est pour ça qu'il est très risqué (voir faux) de dire "Héritage public : EST-UN".
    "The worst errors I've ever seen do not came from no knowledge, but from having just the the right amount of it, too small to really understand what you're doing, but enough to think you did. That amount of knowledge, is evil."

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    309
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 309
    Points : 148
    Points
    148
    Par défaut
    Des messages interessants ont malheureusement ete supprimes de cette discussion suite au pb de base de donnees. Dommage.

    Je remercie tout le monde une fois de plus et je tag "resolu".

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

Discussions similaires

  1. [FLASH MX2004][AS2] Composition
    Par bolo dans le forum Flash
    Réponses: 9
    Dernier message: 10/12/2004, 16h53
  2. Aide sur la création d'un type simple (nom composite)
    Par testeur dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 06/11/2004, 20h30
  3. clés composites
    Par Yuna dans le forum Administration
    Réponses: 12
    Dernier message: 08/01/2004, 09h14
  4. autre probleme pour deriver fonction
    Par voyageur dans le forum Mathématiques
    Réponses: 15
    Dernier message: 28/07/2003, 14h37
  5. [WSAD] Composition visuelle d'une applet
    Par schum11 dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 09/04/2003, 16h19

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