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 :

Hiérarchie de relations d'héritage


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par défaut Hiérarchie de relations d'héritage
    Bonjour

    Dans Exceptionnal C++, Sutter affirme ceci:

    If a class relationship can be expressed in more than one way, use the weakest relationship that's pratical. Given that inheritence is nearly the strongest relationship you can express in C++, it's only really appropriate when there is no equivalent weaker alternative.
    Voici une hiérarchie, certainement pas exhaustive des relations entre les héritages, du plus fort au plus faible.

    J'aimerais bien avoir l'avis des experts, surtout pour la compléter.

    frendship
    public inheritence
    private inheritence
    layering (composition)

    Pourquoi choisir toujours la relation la plus faible?

    Merci

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 35
    Par défaut
    Attention les fonctions amies ne sont pas synonyme d'héritage elles sont un outils qui permet d'accéder aux données privé d'une autre classe!!

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Par défaut
    a class relationship ne signifie pas nécessairement qu'il y a un héritage mais que les classes sont en relation. L'amitié est bien une relation, donc c'est tout à fait pertinent de la faire rentrer dans ce sujet.

  4. #4
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Doubs (Franche Comté)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Par défaut
    Pour répondre à la secondes question, la raison est contenue elle même dans la notion de relation plus forte. Plus la relation est forte plus les contraintes sémantiques sont élévés. Par exemple tu imposes bien plus de choses sur le sens de tes classes en disant qu'un B est un A qu'en disant qu'un A a un B, dans le premier cas ca impose en particulier que tu puisses voir un B comme un A (LSP), alors que dans le second cas non.

    C'est la hiérarchie que donne Sutter ? Personnelement j'ai un peu du mal à clairement placer la relation d'amitié dans celle ci, et je trouve que private inheritence et composition font doublons, après tout l'héritage privé n'est qu'un moyen de réaliser une composition. Tu peux, je pense, rajouter agrégation comme relation plus faible que la composition, typiquement ca correspondrait à un pointeur ou une référence en donnée membre (la destruction du lien n'implique plus la destruction des deux éléments liés).

  5. #5
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Je rejoins Flob90 en ce qui concerne l'amitié, elle ne rentre pas très bien dans cette échelle. De mon point de vue, elle s'exprime plus sur un axe portant sur l'ouverture des détails à l'extérieur (et se compare donc davantage avec la présence de membres public ou de getter/setter même si j'ai aussi du mal à trouver une relation d'ordre entre eux) que sur l'axe class relationship (même si en toute rigueur, il s'agit bien - ou plutôt il peut s'agir - d'une relation entre classe).

    Néanmoins, si je dois vraiment placer l'amitié dans l'échelle que tu donnes, je ne la mettrais pas au même endroit que toi ne serait-ce que parce qu'elle ne se répercute pas directement , contrairement à l'héritage public, sur les utilisateurs des classes. Vu de l'extérieur des deux classes en relation, ça reste un détail d'implémentation.

  6. #6
    Membre éprouvé
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par défaut
    dans le premier cas ca impose en particulier que tu puisses voir un B comme un A (LSP),
    Liskov substitution principle?
    Je n'ai pas trop compris ce principe. Qu'est-ce au juste?

Discussions similaires

  1. mapper une relation d'héritage
    Par DoubleU dans le forum Hibernate
    Réponses: 3
    Dernier message: 29/11/2008, 02h19
  2. [MCD] Comment créer une relation d'héritage dans Access
    Par Marounda dans le forum Schéma
    Réponses: 4
    Dernier message: 11/01/2008, 16h28
  3. relation d'héritage entre acteurs
    Par pigeon11 dans le forum Cas d'utilisation
    Réponses: 8
    Dernier message: 31/08/2007, 18h34
  4. Relations d'héritage dans un SGBD
    Par mawi dans le forum Access
    Réponses: 3
    Dernier message: 18/04/2005, 15h15
  5. Relations d'héritage dans un SGBD
    Par mawi dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 13/04/2005, 23h51

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