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
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
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?
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
Merci pour vos réponse en faite j'ai viens de trouvé la réponse, voila un exemple:
la question qui se pose :
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(); }
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.
Vive les roues en pierre
N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
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
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
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager