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

Architecture Discussion :

interface ou héritage ?


Sujet :

Architecture

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 12
    Points : 12
    Points
    12
    Par défaut interface ou héritage ?
    Bonjour.

    Je lis ceci dans un tutoriel pêché sur un site de dév :

    "implémenter une interface plutôt que dériver d'une classe semble être un principe assez admis chez les architectes..."

    Je ne comprends pas pourquoi (et aucune explication n'est donnée bien entendu). Quelqu'un peut-il éclairer ma lanterne ?

  2. #2
    Membre expérimenté
    Avatar de Patriarch24
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 047
    Points : 1 640
    Points
    1 640
    Par défaut
    Pour des raisons d'abstraction, il est plus intéressant d'utiliser des interfaces plutôt que des classes, même abstraites. D'ailleurs, de très nombreux patterns utilisent des interfaces comme composant clé.
    En premier lieu, utilisez un moteur de recherche.
    En second lieu, postez sur le forum adéquat !

  3. #3
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Points : 18 679
    Points
    18 679
    Par défaut
    Citation Envoyé par Patriarch24 Voir le message
    Pour des raisons d'abstraction, il est plus intéressant d'utiliser des interfaces plutôt que des classes, même abstraites. D'ailleurs, de très nombreux patterns utilisent des interfaces comme composant clé.
    classe abstraite pure <=> interface

    donc ton "analyse" est soit très incomplète, soit complètement biaisée


    -----------------

    il faut surtout garder à l'esprit que peu de langages supportent l'héritage multiple (donc la possibilité d'utiliser différentes classes réelles ou abstraites pour factoriser encore plus le code, etc).
    en gros, on y voit surtout Perl (qui laisse faire tout ce qu'on veut), Python, C++ ou OCaml (mais avec des annotations explicites pour l'héritage de méthodes qui pourraient appartenir à différentes classes mères)


    des langages mainstream comme C# et Java préfèrent hériter d'une unique classe mère, et implanter plusieurs interfaces...

    après en C++, il ne faut pas oublier que le moteur de template peut aussi un énorme rôle... mais on sort du cadre "standard" de l'héritage
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  4. #4
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut
    Salut,

    Un des seuls cas où j'utilise l'héritage est pour factoriser du code d'une famille de classes qui ont un comportement intrinsèque et fondamental commun. Dans ce cas cela prend souvent la forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Interface 
       ^
       |
    Classe abstraite avec le code commun 
       ^
       |
    Classes concrètes
    Les raisons pour laquelle l'héritage traditionnel n'est pas souvent utilisé dans les applications d'entreprise :

    - Pas d'héritage multiple en Java et C# : comme dit gorgonite, mieux vaut utiliser une interface que griller sa seule cartouche d'héritage.

    - La règle "Préférer la composition à l'héritage" permet une injection d'un comportement au runtime plutôt qu'un héritage inamovible fixé à la compilation.
    Pensez au bouton

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 198
    Points : 106
    Points
    106
    Par défaut
    Citation Envoyé par gorgonite Voir le message
    classe abstraite pure <=> interface
    En C++, ce n'est pas la même chose d'un point de vue non conceptuel ?

    Je me trompe peut-être mais la seule différence que je vois entre une classe abstraite pure et une interface et que l'interface ne peut pas avoir d'attributs. Et comme de toute façon en C++, la notion d'interface est uniquement conceptuel dans le sens ou interface ou pas ca se declare par ": public IClasse".

Discussions similaires

  1. Une interface avec héritage
    Par abdelilah dans le forum Débuter avec Java
    Réponses: 11
    Dernier message: 26/02/2010, 15h37
  2. Interfaces VS héritage
    Par FRED.G dans le forum Général Dotnet
    Réponses: 38
    Dernier message: 17/03/2007, 10h32
  3. [POO] Interface ou héritage ?
    Par s.n.a.f.u dans le forum VB.NET
    Réponses: 3
    Dernier message: 17/03/2007, 02h02
  4. Réponses: 3
    Dernier message: 30/08/2006, 16h35
  5. Interface et héritage
    Par pirbd dans le forum Delphi
    Réponses: 2
    Dernier message: 12/07/2006, 14h40

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