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 :

[heritage][conception]héritage multiple en java!


Sujet :

Langage Java

  1. #1
    Membre habitué Avatar de soulhouf
    Inscrit en
    Août 2005
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 213
    Points : 133
    Points
    133
    Par défaut [heritage][conception]héritage multiple en java!
    bonjour,
    j'ai une interface graphique dans laquelle l'utilisateur effectue un ensemble de manipulations qui aboutissent à des résultat différents suivant les actions et l'ordre de ces actions.
    exemple:je selectionne un champ et je clique sur ok, j'entre du texte et je l'ajoute au champ... etc
    et vu que le nombre d'actions est important j'ai pensé à un automate donc j'ai implémenté le pattern Etat qui est "surveillé" par un Controleur qui se compose de plusieurs classes qui implementent le pattern Visiteur et qui correspondent à des actions différentes (appui sur bouton, selection,... etc).
    mon problème est le suivant:
    je voudrais faire de l'héritage multiple car les différents évennements ne sont pas du même type(appui sur bouton, selection,... etc) et donc correspondent à des listener différents.
    je voudrai savoir si le passage des interfaces est propre pour faire de l'héritage multiple en java?
    j'espère que je me suis fait comprendre.
    merci d'avance

  2. #2
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Oui, tu peux très bien implémenter plusieurs interfaces dans une même classe... Il n'y a rien de génant la dedans (au contraire!).

    a++

  3. #3
    Membre habitué Avatar de soulhouf
    Inscrit en
    Août 2005
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 213
    Points : 133
    Points
    133
    Par défaut
    en faite est ce que je peux faire par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public interface Visiteur extends ActionListener, ListSelectionListener{
         /*
           bla bla bla
         */
    }
    et l'interface Visiteur hérite de toutes les spécifications de ActionListener et ListSelectionListener? et s'il y avait des methodes communes comment ça se comporte?
    j'ai du mal à accepter ça

  4. #4
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Je ne vois que deux "problèmes" potentiels :
    • 1) Deux interfaces définissent la même méthode mais dont l'utilisation est totalement différente. Par exemple une méthode init() qui serait appellé une seule fois pour l'interface 1, alors qu'elle serait appellé avant chaque traitement pour l'interface 2. Mais généralement cela signifie que l'héritage multiple est incorrect dans ce cas car les interfaces ont un fonctionnement totalement différent...

      2) Deux interfaces définissent une méthode avec le même nom, les mêmes paramètres, mais un type de retour différent (par exemple String getId() et int getId()) et dans ce cas là ton interface ne compilera pas du tout...



    Le problème de l'héritage multiple de classe survient car on peut se retrouver avec deux codes différents pour une même méthode... mais pour une interface le problème ne se pose pas puisqu'il n'y a pas de code...


    Pour en revenir à ton cas, si ton interface étend plusieurs Listener cela ne devrait pas te poser de problème... d'ailleurs c'est même utilisé dans l'API standard (par exemple l'interface MouseInputListener qui implémente MouseListener et MouseMotionListener).

    a++

  5. #5
    Membre habitué Avatar de soulhouf
    Inscrit en
    Août 2005
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 213
    Points : 133
    Points
    133
    Par défaut
    merci bien adiGuba tu m'as bien éclairé
    sinon ton avatar est vraiment trop cool! Crono is the best 8)

  6. #6
    Membre averti
    Inscrit en
    Août 2005
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 352
    Points : 427
    Points
    427
    Par défaut
    Oui tu peux le faire.
    Par contre, si les 2 interfaces (A et B) présentent une méthode avec la même signature, tu ne pourras pas faire la différence entre un appel sur l'interface A ou sur l'interface B (en tout cas la dernière fois que j'ai tenté l'expérience en Java je ne pouvais pas le faire). Tu devras te contenter d'une seule implémentation pour ta méthode.
    En C# tu peux le faire en préfixant ta méthode avec l'interface A ou B. Si mes souvenirs sont exacts on a un quelque chose comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public void A.toto() {...}
    public void B.toto(){...}
     
    ((A)c).toto();
    ((B)c).toto();
    c.toto();//exception je pense, quelle implémentation choisir ?
    Est ce que Java fournit maintenant un mécanisme similaire ? Je ne crois pas.
    Sinon je partage l'avis de adiGuba

  7. #7
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par dlemoing
    Est ce que Java fournit maintenant un mécanisme similaire ? Je ne crois pas.
    Non car cela consiste à l'héritage multiple entre classe (tu as deux codes différents pour la même méthode). Mais cela apporte généralement plus de problème que de solution... c'est pourquoi c'est interdit en Java...

    a++

  8. #8
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    D'ailleurs on s'en sort toujours autrement. En 7 ans de Java je n'ai jamais ressenti le besoin de faire un héritage multiple.

  9. #9
    Membre habitué Avatar de Original Prankster
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    226
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 226
    Points : 192
    Points
    192
    Par défaut
    Citation Envoyé par Gfx
    D'ailleurs on s'en sort toujours autrement. En 7 ans de Java je n'ai jamais ressenti le besoin de faire un héritage multiple.
    Parce que tu n'as jamais fait de C++ ??

    Disons que les interfaces, comme on le disait dans un autre post hier permettent de combler ce manque...

  10. #10
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Oh si j'ai fait du C++, et même en Python il m'est arrivé d'utiliser l'héritage multiple. Mais il est vrai que les interfaces, utilisées correctement, comblent ce manque. Cela dit les interfaces n'ont pas vraiment la même signification sémantique que l'héritage multiple classique dans un programme donc ce n'est pas tout à fait la solution au même problème.

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

Discussions similaires

  1. Héritage Multiple en Java
    Par tchernogod dans le forum Général Java
    Réponses: 2
    Dernier message: 23/05/2011, 12h53
  2. Héritage multiple en Java
    Par nsanabi dans le forum Général Java
    Réponses: 3
    Dernier message: 26/01/2011, 18h58
  3. Héritage multiple en JAVA
    Par y.medium dans le forum Langage
    Réponses: 5
    Dernier message: 07/11/2008, 23h59
  4. Héritage multiple en Java
    Par bim92i dans le forum Débuter avec Java
    Réponses: 6
    Dernier message: 28/08/2008, 09h17
  5. [DC] Héritage multiple (en java)
    Par c0rt0 dans le forum Diagrammes de Classes
    Réponses: 6
    Dernier message: 20/02/2008, 10h52

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