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 :

Héritage VS Composition


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 366
    Par défaut Héritage VS Composition
    Bonjour,

    Je souhaiterais recueillir des avis/exemple (généraux ou très orientés sur un domaine) sur l'utilisation de ces deux concepts dans des cas non intuitifs, par exemple des exemples ou l'on préfèrera la composition à l'héritage, alors qu'on aurait tendance à faire l'inverse au premier abord (par exemple parce qu'on se base sur le monde réel pour la modélisation).

    Je ne sais pas si ces choix sont complètements indépendants du langage c'est pourquoi je poste sur ce forum plutôt que le forum UML.

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 394
    Par défaut
    Le conseil qui ressort de la plupart de mes lectures est de privilégier la composition à l'héritage. Je ne conserve l'héritage que lorsque la relation "est un' est flagrante ou pour introduire un niveau d'abstraction dans mon architecture.
    Il y a quelques temps, une bonne référence à un chapitre de B. Meyer a été posté sur ce forum. Je possède encore une copie du PDF, mais plus le lien.

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

  4. #4
    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
    C'est bien la recherche avancée.
    -> http://www.developpez.net/forums/sho...90&postcount=6 (il me sembait bien que j'avais pondu un truc très succinct à ce sujet il y a très très peu)

    -> http://www.developpez.net/forums/sho...&postcount=109 (A peine plus argumenté, qui insiste sur la non utilisation de l'héritage public pour de la réutilisation de code -- que l'on retrouve dans les premières pages du pdf sur l'héritage, tiré du bouquin du bouquin de B.Meyer ; ne pas oublier que le C++ dispose d'un héritage de réutilisation -> l'héritage privé).

    [...lien vers le bouquin de Meyer...]
    Arg. Je n'avais déjà pas fini les 200 pages du document de Stepanov, qu'en voici 62 de plus de Meyer.
    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...

  5. #5
    Membre éclairé Avatar de Bayard
    Inscrit en
    Juin 2002
    Messages
    863
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 863
    Par défaut
    Aprés d'éminents spéciallistes, je me permet de donner mon avis.

    L'héritage corresponds au verbe "être" et la composition au verbe "avoir".

    Par exemple: une Ferrari Testarossa "est" une voiture de course.

    "est" une voiture de course
    -> elle hérite des voitures (4 roues, un chassis). "De course" lors de l'héritage le levier de vitesse passe de 5 à 6 vitesses.

    Une voiture a 4 roues, un volant, etc... C'est une composition (appelé aussi agrégation).

  6. #6
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 366
    Par défaut
    Merci beaucoup pour vos réponses

  7. #7
    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,
    Citation Envoyé par Bayard
    Aprés d'éminents spéciallistes, je me permet de donner mon avis.

    L'héritage corresponds au verbe "être" et la composition au verbe "avoir".

    Par exemple: une Ferrari Testarossa "est" une voiture de course.

    "est" une voiture de course
    -> elle hérite des voitures (4 roues, un chassis). "De course" lors de l'héritage le levier de vitesse passe de 5 à 6 vitesses.

    Une voiture a 4 roues, un volant, etc... C'est une composition (appelé aussi agrégation).
    Pour notre malheur, il faut encore etre prudent avec la règle du "est un(e)"...

    Car, en effet, on peut, en changeant juste un peu son point de vue, transformer une relation estun(e) en une relation "a"...
    une ferrari testarossa est une voiture de course
    ==>
    une ferrari testarossa a les composants propres aux voitures de courses
    Ce qui est donc sûr, c'est que si tu ne peux pas décemment estimer une relation "est un" (le propriétaire d'une voiture n'est clairement pas une voiture) -ou qu'au contraire, tu ne peut qu'estimer une relation "a un"- c'est que tu seras d'office dans une logique de composition

    Face à une relation "est un", il est parfois intéressant de s'inquiéter du contexte dans lequel tu travailles:

    Si la classe B a toutes les caractéristiques de la classe A, mais qu'elle est susceptible, durant son cycle de vie, de modifier la classe A, tu te tourneras vers une composition...

    Si, par contre, les caractéristique de A sont définies une fois pour toutes dans B, sans modification, il est déjà plus probable que tu te tournes vers un héritage...

    Evidemment, la ferrari testarossa est peut etre, justement, le contre exemple du changement de point de vue réussi . Car, dans quelle mesure peut on, une fois qu'on a une ferrari, en changer ses caractéristiques de voiture de course
    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

  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 : 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
    Citation Envoyé par Bayard
    L'héritage corresponds au verbe "être" et la composition au verbe "avoir".

    Par exemple: une Ferrari Testarossa "est" une voiture de course.
    Donc si je dis qu'une voiture, c'est un habitacle, une plateforme, et un bloc moteur, je dois faire hériter ma voiture des classes caisse, plateforme et blocMoteur ?

    Le français, comme tout langage naturel, est ambigü. Basé un choix pour un langage formel sur une analogie avec un langage naturel me semble dangereux, même si ça peut aider à mieux comprendre au début.
    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: 11
    Dernier message: 26/11/2011, 23h15
  2. Héritage (pattern Composite)
    Par Ploupi dans le forum Langage
    Réponses: 4
    Dernier message: 21/09/2011, 10h36
  3. MCD correspondant à UML avec héritage et composition
    Par thomine dans le forum Modélisation
    Réponses: 4
    Dernier message: 08/07/2011, 11h21
  4. Héritage et composition
    Par arkerone dans le forum Langage
    Réponses: 3
    Dernier message: 21/11/2010, 14h00
  5. Héritage de composition.
    Par 3DArchi dans le forum BOUML
    Réponses: 1
    Dernier message: 30/07/2008, 14h59

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