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

Langages de programmation Discussion :

Dans quels cas écrire des classes non héritables ?


Sujet :

Langages de programmation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2003
    Messages : 304
    Par défaut Dans quels cas écrire des classes non héritables ?
    Salut !

    J'ai vu qu'en C# on pouvait écrire des extensions pour des classes qui ne seraient pas héritables/dérivables, ce qui m'a fait réfléchir à la question : mais pourquoi est-ce que je décidrais que ma classe personne ne devra en hériter ?

  2. #2
    Membre émérite
    Inscrit en
    Janvier 2011
    Messages
    805
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Janvier 2011
    Messages : 805
    Par défaut
    Hello,

    Le danger avec l'héritage (et surtout la surcharge) c'est d'altérer une propriété implicite de la classe mère et d'aboutir à des bugs.

    Un exemple bien connu d'héritage défectueux est de faire dériver une classe Carré d'une classe Rectangle. Si le setter de Carre.Hauteur est redéfini dans la classe Carré pour systématiquement fixer la Largeur à la même valeur (puisqu'un carré doit toujours avoir les côtés de même longueur), on a une propriété du Rectangle qui est violée, à savoir :

    Un consommateur de Rectangle s'attend à ce que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    r.Largeur = y;
    r.Hauteur = x;
    r.Surface // doit toujours retourner x*y
    Cette propriété n'est plus respectée si on passe à ce consommateur de Rectangle un Carré tel que défini précédemment puisque la surface vaudra dans les faits x*x et non plus x*y.

    Bien sûr c'est un exemple basique mais il est d'autant plus valable pour des bases de code plus complexes. Donc pour éviter la tentation qu'aurait un autre développeur d'hériter de notre classe et de surcharger son comportement, en craignant qu'il puisse mal la surcharger, on scelle la classe. On voit ça parfois dans des bibliothèques ou frameworks.

    Une classe scellée peut aussi être plus performante. Cf https://docs.microsoft.com/en-us/dot...elines/sealing

  3. #3
    Membre éclairé

    Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Février 2004
    Messages
    773
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Février 2004
    Messages : 773
    Par défaut
    J'ai toujours été totalement contre cette mode du private et du sealing de classes en POO, car pour moi cela va à l'encontre d'un des 3 piliers de la POO : la réutilisabilité.

    Et on en manque tellement en développement de réutilisabilité. Mais ca redevient à la mode avec des frameworks de type composants.

  4. #4
    Membre émérite
    Inscrit en
    Janvier 2011
    Messages
    805
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Janvier 2011
    Messages : 805
    Par défaut
    En quoi sceller une classe empêche de la réutiliser ?

  5. #5
    Membre éclairé

    Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Février 2004
    Messages
    773
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Février 2004
    Messages : 773
    Par défaut
    Citation Envoyé par Luckyluke34 Voir le message
    En quoi sceller une classe empêche de la réutiliser ?
    Tu ne peux pas modifier son comportement, ce qui limite quand même fortement sa réutilisation. La capacité à hériter est une grande partie de la réutilisation des classes.

    Le concepteur d'une classe ne sait pas tout ce que d'autres voudront faire avec sa classe, d'où l'intérêt pour moi de laisser ouvert au maximum en POO.

    Rien de plus frustrant d'être bloqué, comme il y a quelques années en DotNet, sur une classe de Microsoft complètement Sealed et en plus de ne pas en avoir le code source.

  6. #6
    Membre émérite
    Inscrit en
    Janvier 2011
    Messages
    805
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Janvier 2011
    Messages : 805
    Par défaut
    Comme je le disais, c'est compréhensible de vouloir empêcher qu'on hérite de sa classe si on craint que les gens ne surchargent en violant des préconditions et invariants.

    Et il vaut souvent mieux utiliser la composition que l'héritage pour réutiliser de l'existant. L'idée, c'est que plutôt que de bidouiller un truc qui existe via l'héritage, on va s'en servir tel quel et adapter le résultat qu'il nous retourne.

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

Discussions similaires

  1. UML : Qui s'en sert ? Pourquoi ? Dans quels cas ? Où ?
    Par Matthieu Brucher dans le forum UML
    Réponses: 83
    Dernier message: 10/06/2013, 17h13
  2. Réponses: 7
    Dernier message: 26/09/2012, 20h44
  3. Dans quels cas est-on obligés d'utiliser des mutex ?
    Par kidpaddle2 dans le forum Threads & Processus
    Réponses: 3
    Dernier message: 18/07/2010, 21h05
  4. [Zope] Dans quel cas utiliser zope ?
    Par kalimero dans le forum Zope
    Réponses: 3
    Dernier message: 26/07/2005, 10h08
  5. [corba] débutant : dans quels cas l'utiliser
    Par jmturc dans le forum CORBA
    Réponses: 2
    Dernier message: 10/10/2002, 09h58

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