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 :

niveau d'héritage ?


Sujet :

C++

  1. #1
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut niveau d'héritage ?
    Bonjour,
    j'ai une class A qui herite de B, B hérite de C etc, etc, etc

    Pour vous qu'elle devrait être le niveau maximum pour les héritage successive?
    Pour moi, 4-5 est le maximum. Aprés je pense que c'est une mauvaise conception des class
    merci

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Points : 1 543
    Points
    1 543
    Par défaut
    Salut,

    Pour moi : 3.

    Une interface (que des virtuelles pures), une classe abstraite (qui factorise des traitements) en-dessous et des classes concrètes encore en-dessous.
    Sachant qu'en pratique la classe abstraite n'apparaît que lors d'un remaniement pour réduire une duplication dans les classes concrètes...

    MAT.

  3. #3
    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 611
    Points
    30 611
    Par défaut
    Salut,

    Je ne crois pas qu'il soit opportun de se placer des limites trop strictes à ce sujet.

    Si le point de vue de Mat est tout à fait sensé en générale, il n'en demeure pas moins qu'il m'est déjà arrivé d'avoir 5 niveau d'héritage, tout en respectant pleinement le principe énoncé dans effective C++ (ou est-ce l'un des autres ) d'avoir recours à l'héritage pour spécialiser, et non pour implémenter.

    Mais, si tu mets une limite aux niveaux d'héritage, tu risque de te retrouver face à un problème lorsqu'il s'agira - par exemple - de modéliser les différents êtres vivants.

    En effet, bien que cela ne respecte plus forcément le principe de la spécialisation cher à Ac++, si tu dois modéliser les différentes classes, ordres, sous classes, sous ordres et autres de l'évolution, tu n'auras pas le choix, et tu te retrouvera très rapidement avec 8 à 10 niveaux d'héritage... si pas plus.

    Et ce n'est pas un domaine isolé, car il serait aussi possible de parler des classes représentant les éléments visuels d'une interface graphique et tant d'autres domaines

    De plus, on peut estimer que, si la norme prévoit qu'un compilateur qui la respecte doit au minimum pouvoir supporter 16384 classe de base directes ou indirectes, c'est que le comité ne voulait en tout cas pas placer de restriction trop subjective en la matière, même si l'idée n'est visiblement pas d'inciter les gens à respecter Ac++
    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

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Bien sur, y as toujours des exceptions.
    Ce que je veut dire c'est quand on arrive à un certain niveau, il faut mieux se demander pourquoi.

    Citation Envoyé par koala01 Voir le message
    En effet, bien que cela ne respecte plus forcément le principe de la spécialisation cher à Ac++, si tu dois modéliser les différentes classes, ordres, sous classes, sous ordres et autres de l'évolution, tu n'auras pas le choix, et tu te retrouvera très rapidement avec 8 à 10 niveaux d'héritage... si pas plus.
    Pourquoi de pas plustôt utiliser des class poltique ?

    ps :C'est quoi Ac++?

  5. #5
    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 611
    Points
    30 611
    Par défaut
    Citation Envoyé par Mongaulois Voir le message
    Bien sur, y as toujours des exceptions.
    Ce que je veut dire c'est quand on arrive à un certain niveau, il faut mieux se demander pourquoi.
    Nous sommes donc bien d'accord...

    Je voulais principalement attirer l'attention sur le fait que je n'ai rien contre le fait de se donner une limite, pour autant qu'elle soit appliquée de manière raisonnée : je suis pour la rigueur, mais contre la rigidité
    Pourquoi de pas plustôt utiliser des class poltique ?
    Une classe politique permettra de faire la distinction entre le kangourou et le koala - qui sont tous les deux des marsupiaux - mais il sera bien plus difficile de faire la distinction entre un éléphant - qui est un parchiderme - et une vache - qui est un bovidé - avec une classe politique, alors que tous deux sont des mammifères
    ps :C'est quoi Ac++?
    C'est "Advenced C++", qui est l'un des bouquins de la même veine que (more) effective C++ et consors
    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

  6. #6
    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
    Citation Envoyé par Mat007 Voir le message
    Salut,

    Pour moi : 3.

    Une interface (que des virtuelles pures), une classe abstraite (qui factorise des traitements) en-dessous et des classes concrètes encore en-dessous.
    Sachant qu'en pratique la classe abstraite n'apparaît que lors d'un remaniement pour réduire une duplication dans les classes concrètes...

    MAT.
    Tu veux dire que le pire cas à envisager c'est l'héritage en diamant ?

    Citation Envoyé par Mongaulois Voir le message
    Pourquoi de pas plustôt utiliser des class poltique ?

    ps :C'est quoi Ac++?
    J'en connais un qui a lu mon article Ca fait toujours plaisir.

    Normalement AC++ c'est pour Accelerated C++

  7. #7
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    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 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Citation Envoyé par koala01 Voir le message
    C'est "Advanced C++", qui est l'un des bouquins de la même veine que (more) effective C++ et consors
    Le Coplien? Tu fais bien de préciser le titre du livre, car beaucoup comprennent Accelerated C++ quand on dit AC++.
    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...

  8. #8
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par koala01 Voir le message
    Une classe politique permettra de faire la distinction entre le kangourou et le koala - qui sont tous les deux des marsupiaux - mais il sera bien plus difficile de faire la distinction entre un éléphant - qui est un parchiderme - et une vache - qui est un bovidé - avec une classe politique, alors que tous deux sont des mammifères
    parchiderme ( pour une fois que c'est pas moi), bovidé, ... ce n'est que du classement.
    On pourrais faire une class mono cellulaire et une multi-cellulaire qui utilise des politiques pour :
    - environnement
    - mode de déplacement
    - mode de nutrition
    - ...

    Car avec l'héritage, un pachyderme ne pourra plus jamais évoluer vers un bovidé (ouai bon c'est un peu n'importe quoi...mais c'est le principe) hors l'évolution pourrais très bien vouloir rapprocher un éléphant et une vache vers une même famille....

  9. #9
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Pas d'autre avis?

  10. #10
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    Ben je sais pas trop. Il y a beaucoup d'exemples de libs/programmes qui ont plus de 5 niveaux d'héritage (les libs d'IHM, les gros progammes...). Je ne pense pas qu'il soit vraiment pertinent de mettre une limite comme ça, absolue.

    L'héritage, pour moi, a une signification, donc si ton modèle est sensé, rien n'empêche un grand nombre de niveaux d'héritage. J'ai récemment travaillé sur une application qui sert à communiquer avec une machine assez complexe (un compteur électrique "intelligent"), et le protocole de communication a été implémenté avec beaucoup de niveaux d'héritage (jusqu'à 9 il me semble), la dernière "feuille" de l'arbre d'hériatge étant une trame. Au début ça fait peur, mais en fait, ce design permet d'utiliser ces trames à différents niveaux d'abstraction et ça c'est avéré extrêment pratique.
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  11. #11
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par r0d Voir le message
    Ben je sais pas trop. Il y a beaucoup d'exemples de libs/programmes qui ont plus de 5 niveaux d'héritage (les libs d'IHM, les gros progammes...). Je ne pense pas qu'il soit vraiment pertinent de mettre une limite comme ça, absolue.
    C'est pas vraiment une limite absolue, mais un repère. C'est a dire au bout d'un certain niveau (4-5 pour moi ), il faut mieux prendre le temps de remettre en question son architecture avant de continuer...
    Dans la plupart dea cas, la réponse Mat007 suffit.
    après Y as les ihm... Mais y as pas tant que cela de niveau :
    http://doc.trolltech.com/extras/qt43-class-chart.pdf

  12. #12
    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 611
    Points
    30 611
    Par défaut
    Tu remarquera quand même que 5 voir 6 niveaux d'héritages sont fréquents dans Qt (ce qui est quand même dans la limite supérieure - et au delà - de celle que tu envisages )

    Le tout, étant sans compter que Qt incite fortement à créer des widget personnels, ce qui implique au minimum un niveau supplémentaire d'héritage

    De la même manière, tu remarquera que, bien que l'héritage multiple soit généralement décrié, il est également utilisé par Qt en plusieurs occasions...

    Je suis d'accord avec le principe qu'il faille se poser la question de savoir si l'arbre d'héritage est cohérent...

    Mais, à vrai dire, il faut se la poser en permanence : Le simple fait d'avoir un seul niveau d'héritage peut être tout à fait incohérent dans une situation donnée, alors que dans une autre circonstance, il peut être parfaitement cohérent et efficace d'en avoir 10, 12 ou... 100...

    Je le redis: s'il est clair qu'il faut absolument rester "aussi simple que la complexité du projet le permet", il ne faut en aucun cas se placer une "limite psychologique" fasse aux possibilités du langage
    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

  13. #13
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Personnellement, au delà de 2, je me pose déjà des questions.

    En général, je m'interroge sur la notion de sous-type que j'implémente en héritant une classe D de ma classe de base B. Liskov a très justement mis en valeur que lorsqu'on hérite d'une classe, on hérite non seulement de son interface mais aussi des comportements induits par cette interface (ce que je vais appeler à tort le contrat de la classe). L'héritage n'est possible que si le contrat de la classe est parfaitement respecté - c'est à dire si du point de vue du client, le comportement de la classe dérivée est identique au comportement de sa classe de base. Ce qui se traduit par l'énoncé suivant (B. Liskov et J. Wing, "Family Values: A Behavioral Notion of Subtyping"):
    Soit q(x) une propriété prouvable à propos des objets x de type T. Alors q(y) doit être vrai pour les objets y de type S lorsque S est un sous-type de T.
    Il en ressort que toutes les propriétés q(x) prouvables sur x - le contrat de T - doivent aussi être prouvables sur q(y) - donc que le contrat de S est identique au contrat de T.

    Cette relation (qui n'est plus une relation is-a mais une relation behaves-as-a) implique une autre vision de l'héritage et de l'objet en général, puisqu'on se libère progressivement d'une approche ontologique assez classique pour aller vers une approche qui se base sur une abstraction des comportements (ce qui ne veut pas dire que l'approche ontologique n'est pas pertinente; elle reste nécessaire, mais elle est efficacement secondée et dans certains cas remplacée par une approche comportementale).

    Dans une approche comportementale, des niveaux d'héritage multiples ne sont plus justifié - en fait, il ne sont même plus justifiables. Il est aisément concevable d'avoir deux niveaux (classe mère et ensemble de classes dérivées), voire trois niveaux dans certains cas, mais redéfinir de manière plus fine le comportement des classes en héritant davantage n'est plus une nécessité.

    On peut bien évidemment trouver des contre-exemples, mais ceux-ci sont rares. De fait, leur mise en place résulte d'une réflexion plus importante qui ne laisse pas la place au doute.

    Ce qui est frappant, c'est la liberté qu'autorise cette approche: puisque la relation is-a n'est plus automatiquement pertinente, on s'abstrait des raccourcis classiques pour se poser de nouvelles questions. Si, au niveau scientifique, un chat est effectivement un mammifère, est-ce que la classe Chat est pour autant un sous-type de la classe Mammifère ? Qu'en est-il de la classe Humain ? Est-il pertinent de reproduire la hiérarchie scientifique de l'arbre des espèces ? Carre est-il un sous-type de Rectangle ? etc. En plus de cette liberté, le principe de substitution de Liskov aplatit la hiérarchie des classes, ce qui en retour force l'utilisation plus importante de la composition afin d'étendre les comportements - ce qui n'est pas un mal...

    Je n'ai pas lu 'Advanced C++', donc je me garderais de dire quoi que ce soit sur ce livre. Les autres livres similaires que j'ai lu (Industrial Strength C++ (ci-dessous ISC++), C++ Coding Standard, C++ Gotchas) ont tendances à dire "il ne faut pas faire si, il faut faire ça" sans se donner la peine de donner une explication correcte du pourquoi. Par explication correcte du pourquoi, j'entends une explication de l'abstraction sous-jacente. Je prends un exemple dans ISC++:
    1) la règle énnoncée:
    Rule 10.8: A pointer or reference to an object of a derived class should be possible to use wherever a pointer or reference to a public base class object is used.
    C'est l'une des simplfication de l'énoncé du principe de substitution de Liskov.
    2) l'explication:
    Substitutability is a property of derived classes that will allow you to use objects of these classes without changing code that depends on the base class interface only. If a virtual member function has a precondition and a postcondition, then these must be valid for all implementations of the class interface. If they are not, the derived class should not inherit the base class.
    (...)
    Substitutability also requires that a derived class always fulfils the base class invariant. Otherwise an object can be put in a state that is not expected by the user of the class.
    Soit, très bien (ISC++ s'en sort plutôt bien comparé à la vaste majorité des ouvrages qui citent ce principe). Mais pourquoi cette notion de substitutability ? D'où est-ce qu'elle vient, qu'est-ce qu'elle entraine ?

    Au final, ce genre d'ouvrage propose des règles, mais sans expliquer la théorie correctement.

    (edit) mention spéciale pour "Effective C++" de Scott Meyers, qui parle du comportement des classes (sans citer le mot comportement) (Item 32). Reste que l'explication qu'il donne est moins nébuleuse que les explications trouvées dans les autres ouvrages. Elle a au moins le mérite de parler de sémantique (mais, bien évidemment, sans citer ce mot).
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  14. #14
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par koala01 Voir le message
    Tu remarquera quand même que 5 voir 6 niveaux d'héritages sont fréquents dans Qt (ce qui est quand même dans la limite supérieure - et au delà - de celle que tu envisages )
    Regarde bien, sur le nombre de classes, très très peu.
    Quand je dit 4-5 c'est pour la majorité des cas. Y as toujours un contre exemple.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Le tout, étant sans compter que Qt incite fortement à créer des widget personnels, ce qui implique au minimum un niveau supplémentaire d'héritage ;)
    Oui, mais cela va au delà de ma question. Hériter correctement d'une lib pour ses besoins est pour moi naturelle. Mais de la même manier, il est très rare de faire plus de deux niveau d'héritage en partant d'une lib.

    Je pose cette question (un peu floue dsl) pour voir comment sont comprise et utilisée l'héritage. Et surtout pour améliorer ma conception objet. J'en ai une approche simple et pas toujours assez réfléchie. D'où cette sorte de limite de 4-5 même si je reste souvent sur 3.

    La réponse d'Emmanuel Deloget est très intéressante, elle montre une réflexion différente de "un chat est un Mammifère donc une classe chat hérite d'une classe Mammifère".
    Je suis d'accord sur
    Au final, ce genre d'ouvrage propose des règles, mais sans expliquer la théorie correctement.

  15. #15
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 749
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 749
    Points : 10 666
    Points
    10 666
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par Emmanuel Deloget Voir le message
    lorsqu'on hérite d'une classe, on hérite non seulement de son interface mais aussi des comportements induits par cette interface
    +1

    En C++ on ne dispose pas au niveau du langage de la notion d'interface a la JAVA, on passe par des ABC (Abstract Base Class). Je pense que c'est un critere important a prendre en compte. Si les classes de base sont des ABC, un niveau relativement eleve d'heritage me choque moins que si la classe de base est une grosse classe concrete qui fait beaucoup de choses. La notion d'interface est fondamentale en COM par exemple. Et alors on obtient facilement des niveaux importants sans que cela soit choquant.

    Quant a chiffrer le niveau max acceptable, j'avais lu dans des conventions de codage un niveau de 3. Au dela, notre petit cerveau d'humain a tendance a saturer rapidement et a perdre le fil. Mais si on travaille sur une grosse bibliotheque, il peut etre difficile d'y arriver. Voir par exemple la hierarchie de VTK.

  16. #16
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par Aurelien.Regat-Barrel Voir le message
    En C++ on ne dispose pas au niveau du langage de la notion d'interface a la JAVA, on passe par des ABC (Abstract Base Class).
    Je ne comprend pas la différence

  17. #17
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Citation Envoyé par Mongaulois Voir le message
    Je ne comprend pas la différence
    Probablement parce qu'il n'y en a pas. Une ABC en C++ est une interface en Java ou C# (enfin, ça revient à ça, même si les contraintes sont différentes).
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  18. #18
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par Emmanuel Deloget Voir le message
    Probablement parce qu'il n'y en a pas. Une ABC en C++ est une interface en Java ou C# (enfin, ça revient à ça, même si les contraintes sont différentes).
    Je me disait aussi.
    A votre avis, l'utilisation de politiques peut elle être une solution pour limiter l'héritage. Comme l'exemple (un peu n'importe quoi mais c'est un exemple) que j'avais écrit ici
    http://www.developpez.net/forums/sho...10&postcount=8
    Personnellement, ce que je reproche à un trop grand niveau d'héritage est :
    - Complexité de compréhension pour une personne tierce
    - Fait peur à un client
    - Debuggage plus complexe
    - Difficulté de remodulation du code si besoin

  19. #19
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 749
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 749
    Points : 10 666
    Points
    10 666
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par Mongaulois Voir le message
    Je ne comprend pas la différence
    Je me suis pas tres bien exprime

    Ce que je voulais dire, c'est qu'en C++, ne disposant pas de la notion d'interface au niveau du langage, on la simule au moyen d'ABC.

  20. #20
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    (ce que je vais dire à est prendre avec des pincettes, ne me pas me plomber si j'ai tord).

    En C++, une ABC c'est une classe qui peut avoir des données membres alors qu'en Java, une interface n'a pas de donnée mais juste des fonctions pures ?
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/08/2014, 01h07
  2. Programme d'étude sur le C++ bas niveau n°11 : Héritage
    Par germinolegrand dans le forum C++
    Réponses: 9
    Dernier message: 03/04/2014, 13h24
  3. [SP-2007] Problème d'héritage au niveau des autorisations
    Par cekamb72 dans le forum SharePoint
    Réponses: 1
    Dernier message: 14/05/2012, 15h10
  4. Ambiguité au niveau héritage
    Par fsidiosidi dans le forum Langage
    Réponses: 4
    Dernier message: 21/05/2010, 14h45
  5. problème au niveau de l'héritage, ou autre chose
    Par lotus0o dans le forum Langage
    Réponses: 5
    Dernier message: 04/06/2007, 12h54

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