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 :

[Language] polymorphisme, interface ...


Sujet :

Langage Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    134
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 134
    Points : 69
    Points
    69
    Par défaut [Language] polymorphisme, interface ...
    Bonjour !
    Comme l'indique le titre, j'arrive pas à comprendre ce que c que le polymorphisme, a quoi ça sert etc ...

    pour interface, j'ai regardé la faq, mais ça ne m'as pas plus éclairé :s ....



    Pour ce qui est du polymorphisme, d'aprés ce que j'ai compris dans mon cours, en gros:

    on a une classe A
    on a une classe B qui hérite de A

    Alors on peu définir un objet A en faisant :
    A a = new B( ... ) ;

    ou l'inverse,... je sais plus

    bref, où est l'intéret ... si c bien de ça qu'il s'agit !?
    et ça ne se limite qu'à ça le polymorphisme ? ou il y a autre chose



    Pour ce qui est des interfaces, grossomodo je pense avoir compris qu'il s'agit de permettre a une classe d'hérité de plusieures autres non ?
    du moins c ce que je pensais avoir compris dans le cours, mais quand j'ai lus la faq ... :o !
    je me trompe ou ça n'a rien à voir ... j'ai rien compris à ce que "vous" dites dedans
    quelqu'un aurait-il la bonté de m'expliqué ce que c'est

  2. #2
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Points : 1 937
    Points
    1 937
    Par défaut
    L'avantage de pouvoir faire:

    C'est que cela permet d'implementer dans A un traitement qui sera commun a toutes les classes derivant de A et que dans ce cas on n'a pas besoin de sepreoccuper du type effectif de l'objet.

    Une interface ne sert pas a faire des extends de plusieurs objets mais de definir des interfaces qu'implementera une classe (des comportements si tu preferres).

    De la meme maniere que pour le polymorphisme cela permet de traiter toutes les classes implementant l'interface comme si c'etait l'interface.

    Par exemple qq soit la classe implementant un ActionListener il suffit de faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ((ActionListener) monObject).actionPerformed(event):
    pour appeler la methode actionPerformed de cet objet.

    Bulbo
    [Java] [NetBeans] [CVS]
    La FAQ Java
    Merci de ne pas me poser de questions techniques par MP.

  3. #3
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mai 2002
    Messages : 101
    Points : 118
    Points
    118
    Par défaut Re: [Théorie] polymorphisme, interface ...
    Citation Envoyé par Ikit
    on a une classe A
    on a une classe B qui hérite de A

    Alors on peu définir un objet A en faisant :
    A a = new B( ... ) ;
    C'est bien dans ce sens là, mais ça, c'est de l'héritage. Si tu veux schématiser, un objet d'une sous-classe est toujours un objet d'une super classe, mais pas l'inverse (Un Homme est un EtreHumain, mais un EtreHumain n'est pas toujours un Homme) A quoi ça sert ? A tout A écrire du code plus simplement, plus proprement, à concevoir un projet de manière plus claire, etc ! Tout ça se fait principalement en "surchargeant" des méthodes : en gros, je suis une sous-classe, je sais faire tout ce que ma super-classe sait faire, mais également un peu plus et de manière plus précise. Par exemple, la classe ArrayList en Java (en gros, c'est un vecteur dynamique). Si tu définis MyArrayList extends ArrayList, d'emblée ta classe sait utiliser tout ce que ArrayList propose comme methode. Les intérêts sont multiples... suppose que tu aies besoin d'un vecteur, mais que celui-ci gère l'ajout différement (du sytle, au lieu d'ajouter les Objets à la fin, il les insère au début), il te suffit de redéfinir la methode add et le tour est joué. Deuxième avantage, si toutes tes autres classes sont définies comme travaillant avec un ArrayList, pas besoin de tout réécrire. Comme MyArrayList EST un ArrayList aussi, ton code marche toujours. Bref, je vais pas m'étendre d'avantage, je pense que t'as compris

    Citation Envoyé par Ikit
    Pour ce qui est des interfaces, grossomodo je pense avoir compris qu'il s'agit de permettre a une classe d'hérité de plusieures autres non ?
    Non, pas exactement L'héritage multiple est interdit en Java. Une Interface sert juste à définir aux yeux de ton programme et des développeurs ce que ton objet est CAPABLE de faire. Si elle implémente Comparable, elle DOIT nécessairement proposer une methode compareTo. Si elle implémente Clonable, elle doit fournir clone(), etc. L'avantage par rapport à l'héritage c'est qu'elle peut implémenter autant d'Interface que tu veux. L'inconvéniant, c'est que tu dois implémenter toutes les méthodes toi-même (pour l'exemple plus haut, tu aurais pu définir MyArrayList comme implémentant List, mais tu aurais dû te retaper toutes les methodes de List, donc l'héritage était plus intéressant).

    Je dois filer au boulot, si y a encore des points d'ombre, hésite pas

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    134
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 134
    Points : 69
    Points
    69
    Par défaut
    C'est bien dans ce sens là, mais ça, c'est de l'héritage. Si tu veux schématiser, un objet d'une sous-classe est toujours un objet d'une super classe, mais pas l'inverse (Un Homm [... ] t, pas besoin de tout réécrire. Comme MyArrayList EST un ArrayList aussi, ton code marche toujours. Bref, je vais pas m'étendre d'avantage, je pense que t'as compris
    ok ok ... mais alors pourquoi définir a comme avec new B()

    quand on fait a c'est un objet de type A ou de type B ?
    a il a les méthodes de B ou A ?


    C'est que cela permet d'implementer dans A un traitement qui sera commun a toutes les classes derivant de A et que dans ce cas on n'a pas besoin de sepreoccuper du type effectif de l'objet.
    ? j'ai du mal à suivre
    en faisant A a = new B on implémente qq chose dans A ?




    De la meme maniere que pour le polymorphisme cela permet de traiter toutes les classes implementant l'interface comme si c'etait l'interface.
    ok
    pour interface je crois que j'ai compris ^^
    si on a 3 classe A B C, qui n'ont rien a voir mais qui utilise la même interface, qui propose la méthode affiche();
    on pourra faire a.affiche(); comme b.affiche(), de la même manière que c.affiche();
    (mais à ce moment là, on peux trés bien se passer de l'interface alors puisqu'il faut redefinir la méthode affiche ds chaque classe ...
    c jute pour la lisibilité ?

    mais pourquoi tu dis :"de la même manière que pour le polymorphisme ?"
    je vois pas où est le point commun ?

  5. #5
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mai 2002
    Messages : 101
    Points : 118
    Points
    118
    Par défaut
    Citation Envoyé par Ikit
    ok ok ... mais alors pourquoi définir a comme avec new B()
    Tu as beau être un EtreHumain (et donc hériter des caractères communs aux êtres humains) au moment de ta naissance tu est forcemment un Homme ou une Femme (en Java on dirait que EtreHumain est abstract, mais ne comppliquons pas...) Cela te permet de profiter des redéfinitions de la classe B. Supposons que tu aies une méthode toString() dans A qui soit super basique et que tu la surcharges dans B pour qu'elle soit super jolie. Quand tu passes ton objet à une méthode qui utilise des objets de type A, elle utilisera toutes les méthodes de A, dont toString(), mais le résultat sera le toString() super joli de B

    a c'est un objet de type A ou de type B ?
    a il a les méthodes de B ou A ?
    1) Les deux
    2) Les deux

    C'est le principe de l'héritage. Un Homme est un EtreHumain et donc un Animal et donc un EtreVivant et donc un Objet etc etc. C'est la hierarchie des classes... Comme Animal propose la méthode respirer(), tous ses enfants en disposent aussi et certains enfants la redéfinissent (comme la classe Poisson par exemple, mais un Poisson n'en reste pas moins un Animal)

    en faisant A a = new B on implémente qq chose dans A ?
    Non, mais tu utilise dans B ce que tu as implémenté dans A.

    on pourra faire a.affiche(); comme b.affiche(), de la même manière que c.affiche();
    (mais à ce moment là, on peux trés bien se passer de l'interface alors puisqu'il faut redefinir la méthode affiche ds chaque classe ...
    c jute pour la lisibilité ?
    C'est ça. Et non, on ne peut pas s'en passer (ou plutôt on peut parfois s'en passer, mais c'est 1) moche et 2) pas efficace du tout). A, B et C implements Affichable (comme dans ton exemple) et affiche() est en réalité un System.out.println() d'une des valeurs de A, B ou C. Si je veux faire une methode callAffiche(), je fais quoi ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public void callAffiche(Affichable affichableObject){
      System.out.print("Mon objet s'affiche : ");
      affichableObject.affiche();
    }
    Maintenant, supprime l'Interface.......

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public void callAffiche(A affichableObject){
      System.out.print("Mon objet A s'affiche : ");
      affichableObject.affiche();
    }
     
    public void callAffiche(B affichableObject){
      System.out.print("Mon objet B s'affiche : ");
      affichableObject.affiche();
    }
     
    public void callAffiche(C affichableObject){
      System.out.print("Mon objet C s'affiche : ");
      affichableObject.affiche();
    }
    Tu vois le problème... ?

    Le point commun avec le polymorphisme vient du fait que pour une signature identique, le résultat est identique. C'est INDISPENSABLE si tu bosses avec d'autres codeurs... chacun code d'une manière différente, mais si tout le monde se met d'accord sur un set d'Interfaces, peut importe l'implémentation, tu SAIS de quelles méthodes tu disposes, même si ce n'est pas toi qui développe la Classe en question...

  6. #6
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    503
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 503
    Points : 445
    Points
    445
    Par défaut
    En tout cas c epost est super interressant.
    L'interêt du doute est que cela fait avancer.
    (parenthèses)Je suis à la recherche d'un emploi sur Valence(26) et ses environs.
    mon cv:
    http://charegis.netcv.org/

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

Discussions similaires

  1. Quel language d'interface pour un base MySQL?
    Par blaise_laporte dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 07/12/2006, 16h24
  2. [Language]Pb implementation de l'interface Comparable
    Par mawashee dans le forum Langage
    Réponses: 3
    Dernier message: 28/11/2005, 16h49
  3. [Language][1.5]Question interfaces multiple:
    Par FreshVic dans le forum Langage
    Réponses: 16
    Dernier message: 18/11/2005, 09h41
  4. [Language][POO]classe interface
    Par Samanta dans le forum Langage
    Réponses: 9
    Dernier message: 21/06/2005, 15h32

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