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

Langage Java Discussion :

Héritage en diamant


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Chatbour
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2006
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2006
    Messages : 431
    Par défaut Héritage en diamant
    Salut à tous et à toutes

    java a interdit l'héritage multiple pour éviter l'héritage en diamant, n'est-ce pas ?
    pourtant C++ l'a déjà évité avec les méthodes virtuelles..
    pourquoi le problème existe donc en java bien que toutes les méthodes sont virtuelles ?

    Merci d'avance..

  2. #2
    Membre chevronné
    Profil pro
    Développeur Java
    Inscrit en
    Novembre 2007
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2007
    Messages : 301
    Par défaut
    L'héritage en diamant est résolu en C++ avec la notion d'héritage virtuel. Ce problème n'est pas résolu avec les méthodes virtuelles. Le problème aurait donc été présent si Java avait permis l'héritage multiple.

    Je ne connait pas la raison officielle de l'interdiction de l'héritage multiple. Je pense que cela simplifie le travail du compilateur. De plus, ce n'est pas une grande perte avec la notion d'interface.

  3. #3
    Membre éclairé Avatar de Chatbour
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2006
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2006
    Messages : 431
    Par défaut
    oui.. mais pourquoi une restriction tant que le problème aurait pu être résolu avec le même concept de C++ : héritage virtuel ?

  4. #4
    Membre chevronné
    Profil pro
    Développeur Java
    Inscrit en
    Novembre 2007
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2007
    Messages : 301
    Par défaut
    J'ai édité mon message précédent :

    Je ne connait pas la raison officielle de l'interdiction de l'héritage multiple. Je pense que cela simplifie le travail du compilateur. De plus, ce n'est pas une grande perte avec la notion d'interface. Qui a vraiment besoin de l'héritage multiple ?

  5. #5
    Membre averti
    Profil pro
    Développeur Java
    Inscrit en
    Septembre 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Septembre 2006
    Messages : 11
    Par défaut
    En fait, l'heritage multiple est delicat d'utilisation ( il est necessaire de regler le sort des attributs et des methodes communes. ) par ailleurs, les exemples où l'heritage multiple se trouve utile sont assez rares. C'est pour cette raison que l'on ne trouve pas d'heritage multiple en java.
    Source:Click

  6. #6
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par Chatbour Voir le message
    oui.. mais pourquoi une restriction tant que le problème aurait pu être résolu avec le même concept de C++ : héritage virtuel ?
    L'"héritage virtuel" n'a en aucun cas résolu le problème. C'est plutôt toute la philosophie du C++ qui permet l'héritage multiple.

    Par défaut en C++ les méthodes ne sont pas virtuelles, ce qui fait qu'il n'y a pas d'héritage. Ainsi les cas de conflit sont bien moins nombreux.

    Prenons le cas de deux classes distinctesA et B possédant chacun une méthode m(), et C une classe qui hériterait de ces deux méthodes.

    • Si m() n'est pas virtuelle (par défaut en C++) il n'y a aucun conflit : la classe C ne possède pas de méthode m(), mais ses deux parent oui. Si je ne me trompe pas en C++ on appelle la méthode en la précédant par le nom de la classe ( A::m() - mais bon je n'en suis plus très sûr mon C++ est assez vieux).
      Il n'y a pas de conflit car en fait c'est comme si on avait deux méthodes avec deux noms différents.
    • Si m() est virtuelle (mot clef virtual en C++), la classe C possède alors automatiquement la méthode m() qu'elle hérite de ses parents et on a conflit : de quelle méthode doit-on hériter : celle de A ou celle de B. Si je ne me trompe pas en C++ il est impératif de redéfinir m() dans C pour fixer l'ambiguïté.



    En Java, contrairement au C++, toutes les méthodes sont virtuelles par défaut (sauf les méthodes final ou private en fait).
    De ce fait le nombre de conflit serait bien plus important qu'en C++.
    De plus l'héritage multiple implique généralement que l'on se passe des méthodes virtuelles, ce qui fait perdre le plus grand intérêt de la POO à mon avis...



    Java n'autorise pas l'héritage multiple. Ce n'est pas techniquement impossible, mais c'est un choix volontaire afin de préserver un code propre et clair, et d'éviter toute confusion/conflit.


    Ce n'est pas parce qu'on peut le faire que c'est forcément bien


    a++

Discussions similaires

  1. Héritage en diamant
    Par DavidleVrai dans le forum Langage
    Réponses: 6
    Dernier message: 21/10/2012, 04h15
  2. Héritage en diamant et méthodes virtuelles
    Par Neckara dans le forum C++
    Réponses: 9
    Dernier message: 06/10/2012, 17h15
  3. Question sur l'héritage en diamant
    Par f56bre dans le forum Langage
    Réponses: 3
    Dernier message: 26/09/2011, 20h31
  4. Héritage multiple & diamant de la mort
    Par oodini dans le forum C++
    Réponses: 7
    Dernier message: 16/06/2010, 14h51
  5. Héritage en diamant foireux...
    Par Progs dans le forum C++
    Réponses: 11
    Dernier message: 05/03/2006, 19h52

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