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

ALM Discussion :

Héritage et implémentation bizarre !


Sujet :

ALM

  1. #1
    Rédacteur

    Avatar de Yoteco
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2004
    Messages
    1 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 099
    Points : 2 498
    Points
    2 498
    Par défaut Héritage et implémentation bizarre !
    Bonjour,

    Je ne savais pas trop quoi utiliser comme titre. Mais l'autre jour j'ai découvert quelque chose de vraiment bizarre à mon avis :

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class A extends B implements IC
    {}
     
    public class B
    {
        public void toto() {}
    }
     
    public interface IC
    {
        void toto();
    }

    Le code ci-dessus compile sans erreurs en Java et en C#. Je n'ai pas essayé d'autres langages. Mais je trouve aberrant que ça fonctionne !

    La classe A implémente l'interface IC mais ne définis pas les méthodes nécessaires. Cependant sa compile car la méthode nécessaire se trouve dans la classe B .

    Quelqu'un peut-il m'expliquer à quoi sa sert de faire ça ? J'ai retrouvé cette façon de faire dans un projet d'Eclipse...

    En procédant ainsi il me semble qu'on "casse" le principe de polymorphisme car dans le cas présenté ci-dessous la classe B est également de type IC mais la classe A ne l'est pas vraiment...
    Blog - Mon espace developpez -
    Oracle Certified Professional, Java SE 6 Programmer
    eZ Publish Certified developer

  2. #2
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    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 Yoteco Voir le message
    Bonjour,

    Je ne savais pas trop quoi utiliser comme titre. Mais l'autre jour j'ai découvert quelque chose de vraiment bizarre à mon avis :

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class A extends B implements IC
    {}
     
    public class B
    {
        public void toto() {}
    }
     
    public interface IC
    {
        void toto();
    }

    Le code ci-dessus compile sans erreurs en Java et en C#. Je n'ai pas essayé d'autres langages. Mais je trouve aberrant que ça fonctionne !

    La classe A implémente l'interface IC mais ne définis pas les méthodes nécessaires. Cependant sa compile car la méthode nécessaire se trouve dans la classe B .

    Quelqu'un peut-il m'expliquer à quoi sa sert de faire ça ? J'ai retrouvé cette façon de faire dans un projet d'Eclipse...

    En procédant ainsi il me semble qu'on "casse" le principe de polymorphisme car dans le cas présenté ci-dessous la classe B est également de type IC mais la classe A ne l'est pas vraiment...
    Le fait de dire que A implémente IC dit juste que l'interface définie dans IC est accessible à partir de A. Qu'elle soit implémentée dans A ou dans une classe dont A hérite n'a pas grand chose à voir.

    L'héritage n'est pas corolaire de l'idée d'interface. On n'hérite pas d'une interface, on l'implémente (d'où le mot-clef). En C++, cette notion a failli exister grâce aux bien nommés "concept"s qui, finalement, ne se retrouveront pas dans la norme. L'intérêt des concept du C++ est qu'il sont clairement décorrélé de toute notion d'héritage : le compilateur vérifie juste que l'interface de la classe correspond à celle qui est attendue.

    Le polymorphisme n'est pas cassé : A implémente IC (donc on peut utiliser une instance de A comme toute autre instance d'IC). Le fait que les méthodes de IC soient implémentées dans B et pas dans A ne change rien. B n'implémentant pas IC (même si, dans les fait, elle donne une implémentation de l'interface définie dans IC), donc B n'est pas de type IC (note qu'en soit, cette expression est trop vague pour vraiment signifier quelque chose. B est de type B, point final. Et A est de type A, point final aussi).
    [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.

  3. #3
    Rédacteur

    Avatar de Yoteco
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2004
    Messages
    1 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 099
    Points : 2 498
    Points
    2 498
    Par défaut
    Ok.

    Mais je ne vois toujours pas dans quel cas ce genre de procédé peut être utile...
    Blog - Mon espace developpez -
    Oracle Certified Professional, Java SE 6 Programmer
    eZ Publish Certified developer

Discussions similaires

  1. [PHP 5.0] [POO] Classes, héritage et implémentation
    Par Lezepal dans le forum Langage
    Réponses: 5
    Dernier message: 08/12/2009, 21h46
  2. [Modèle Relationnel] Implémenter un héritage dans SQLServer
    Par ninolf dans le forum Schéma
    Réponses: 3
    Dernier message: 11/11/2008, 11h48
  3. [SAX] héritage ou implémentation de handler (JAXP)
    Par hamham dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 24/04/2008, 15h55
  4. Réponses: 19
    Dernier message: 12/12/2007, 15h00
  5. Réponses: 8
    Dernier message: 04/06/2004, 09h13

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