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

avec Java Discussion :

Utilité du polymorphisme


Sujet :

avec Java

  1. #1
    Membre régulier
    Profil pro
    Ingénieur d'études et développement JAVA
    Inscrit en
    Mai 2008
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 202
    Points : 103
    Points
    103
    Par défaut Utilité du polymorphisme
    Bonjours tout le le monde,

    Quelle est le genre de problème qu'on résout à l'aide du polymorphisme, et-il utile pour l'injection de dépendance?

    Merci

  2. #2
    Membre averti Avatar de coshibe
    Homme Profil pro
    Développeur Java
    Inscrit en
    Septembre 2011
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 183
    Points : 397
    Points
    397
    Par défaut
    C'est une sacrée question que tu poses là et bien théorique.

    Déja à ma connaissance l'injection de dépendances est propre à la programmation objet. Et presque toujours en POO tu as à faire au polymorphisme.

    Donc késako le polymorphisme?
    chez wiki ca di ça!

    Concrètement le polymorphisme te permet de définir des méthodes pour des objets d'une classe avant que celle ci ne soit créée. Pour cela tu crée une classe de base dont seront issues les futures classes.

    Par exemple Dieu, il a programmé la classe mammifère avant de faire l'homme et le chien. Mais il savait déjà qu'il trouverait les méthodes Manger() et dormir(). Du coup l'homme et le chien qui n'ont rien à voir ont pourtant les mêmes méthodes de base.

    L'autre avantage du polymorphisme c'est de pouvoir ajouter des nouveaux objets d'un type nouveau dans un scenarii pré établi et cela sans même connaitre le type de ce nouvel objet.

    Ce qui fait que l'injection de dépendance est grandement facilitée grâce au polymorphisme parce que tu vas pouvoir gérer les injections sans savoir de quelle nature seront tes injections.


    Ai je répondu à ta question?

  3. #3
    Membre régulier
    Profil pro
    Ingénieur d'études et développement JAVA
    Inscrit en
    Mai 2008
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 202
    Points : 103
    Points
    103
    Par défaut
    comment java fait pour la liaison dynamique ?

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par naou18 Voir le message
    comment java fait pour la liaison dynamique ?
    Euh... Question ouverte.
    Essai de réponse :

    Lors d'un appel de méthode d'instance, Java vérifie quelle est la classe réelle de cette instance, et vérifie si cette classe redéfinit la méthode, ou s'il faut remonter dans la hiérarchie des classes pour trouver une (re)définition de cette méthode.
    La méthode effectivement appelée est la première trouvée comme ça.

    Cela impose donc à Java de vérifier quelle méthode appeler, avant de l'appeler. Ce qui n'est pas aussi efficace que si on appelait directement la "méthode voulue" qu'on aurait spécifiée statiquement.
    Sauf dans le cas de classes ou méthodes finales, auquel cas il ne peut pas y avoir redéfinition, donc il n'y a rien à vérifier et il n'y a pas à proprement parler de liaison dynamique.
    À noter que les optimisations de la JVM sont souvent capables d'accélérer ce procédé (par exemple s'il sait qu'il n'y a aucune sous-classe qui justifie de vérifier quoi que ce soit, chargée ou accessible sur le bout de code concerné)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre régulier
    Profil pro
    Ingénieur d'études et développement JAVA
    Inscrit en
    Mai 2008
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 202
    Points : 103
    Points
    103
    Par défaut
    Merci pour vos réponse en faite j'ai viens de trouvé la réponse, voila un exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class A{
    public void f(){...}
     
    class B extends A{
    public void f(){...}
    }
     
    et A a = new B();
    }
    la question qui se pose :
    l'appel de "a.f()" est'il relatif à la version "f()" de A ou de B?

    la réponse est :
    ce qui détermine la version à utiliser lors de l'appel d'une méthode est le type dynamique de l'instance cible de l'appel.
    Toutefois le contrôle de la validité de l'appel reste statique : c a d l'appel de "a.f()" produirait une erreur de compilation si "f()" n'est pas une méthode de A.

    Donc en conclu que la liaison dynamique existe belle et bien au moment de l’exécution.

  6. #6
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 021
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 021
    Points : 2 278
    Points
    2 278
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Euh... Question ouverte.
    Essai de réponse :

    Lors d'un appel de méthode d'instance, Java vérifie quelle est la classe réelle de cette instance, et vérifie si cette classe redéfinit la méthode, ou s'il faut remonter dans la hiérarchie des classes pour trouver une (re)définition de cette méthode.
    La méthode effectivement appelée est la première trouvée comme ça.
    Salut,
    je me demande si la JVM n'accèderait pas plutôt directement à la bonne méthode via une table d'indirections type_de_classe --> méthode qui serait générée à la définition des classes ? Si quelqu'un a plus d'infos... mais c'est peut-être un peu hors-sujet
    Vive les roues en pierre

  7. #7
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par Djakisback Voir le message
    je me demande si la JVM n'accèderait pas plutôt directement à la bonne méthode via une table d'indirections type_de_classe --> méthode qui serait générée à la définition des classes ?
    Certainement quelque chose de ce genre, si, et alors ? Cela décrit une manière de faire ce que j'ai décrit, ça ne conteste pas ce que j'ai décrit.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 021
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 021
    Points : 2 278
    Points
    2 278
    Par défaut
    Bin disons que si c'est le cas, il n'y a aucune vérification ni recherche dans la hiérarchie des classes mais un accès direct aux méthodes en fonction du type réel, ce qui m'a semblé différent de ce que tu décrivais
    Vive les roues en pierre

  9. #9
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par Djakisback Voir le message
    Bin disons que si c'est le cas, il n'y a aucune vérification ni recherche dans la hiérarchie des classes mais un accès direct aux méthodes en fonction du type réel, ce qui m'a semblé différent de ce que tu décrivais
    Je décrivais un algorithme fonctionnel. Toute optimisation produisant exactement les mêmes résultats est acceptable, et par pragmatisme il m'a toujours semblé évident que c'était ce que faisait Java.
    De toute façon ça change pas que ce genre de consultation de tables est plus lent que juste invoquer directement "la méthode voulue" qu'on aurait indiqué de façon statique.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. Utilité d'un pointeur vers une fonction ?
    Par Nasky dans le forum C
    Réponses: 10
    Dernier message: 20/03/2010, 19h54
  2. [J2EE] Utilité de la J2EE de SUN ?
    Par PeteMitchell dans le forum Java EE
    Réponses: 4
    Dernier message: 14/05/2004, 10h29
  3. [LG]Utilité du type enuméré ?
    Par tarbala dans le forum Langage
    Réponses: 2
    Dernier message: 10/12/2003, 16h20
  4. Le BIOS et son utilité
    Par le mage tophinus dans le forum Assembleur
    Réponses: 75
    Dernier message: 21/11/2003, 15h37
  5. utilité du binaire et hexadecimaux?
    Par souris78 dans le forum C
    Réponses: 9
    Dernier message: 01/07/2003, 15h08

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