-
un objet polymorphé
salut
selon mes informations ,un objet polymorphé est un objet crée apartir d'une class avec un type d'une autre class(heritage,une class mére et une class fille).
la question que je voudrais me poser c est quelle est l'utilité de cette tecnique ? aquel situation je vais dire ahh tiens la il faut que je fasse la tecnique de polymorphisme ?
merci.
-
un exemple vaux mieux que de long discourt.
T'as une classe, décrivant un véhicule, et avec une méthode seDéplace()
T'as une autre classe, disons voiture, qui hérite de véhicule.
Imaginons que je me trouve dans un contexte , ou je dois déplacer un véhicule.
Je sais pas ce que c'est comme véhicule, si c'est un bateau une voiture, ou autre, je sais juste que c'est un véhicule, et qu'il à donc une méthode seDéplace()....
Maintenant j'appel la méthode seDéplace(). J'ai deux possibilité
1 - La méthode seDéplace() n'est pas polymorphique, dans ce cas, la méthode définit dans la classe véhicule sera exécute.
2 - La méthode seDéplace() est polymorphique, et dans ce cas, ca sera la méthode définit dans la classe qui a instancié l'objet qui sera éxécuté. (dans notre exemple si voiture redéfinit seDéplace(), alors ca sera la méthode de voiture qui sera éxecuté, ou une autre méthode si voiture n'hérite pas directement de véhicule et qu'une autre de ses classe mère redéfinisse seDéplace(), par exemple voiture pourrait hérité de véhiculeAMoteur qui rédéfinit seDéplace()....)
Donc quand est-ce que utilise des méthodes polymorphique ?
Soit dans notre contexte, on se fiche que l'on déplace une voiture, ou autre chose, on le veux juste que ce véhicule bouge, l'appel de seDéplace() de véhicule suffira. A l’inverse si le déplacement du type réel de l'objet dois influencer le contexte d’exécution, une méthode polymorphe est nécessaire ...
Lors de l'appel d'une méthode polymorphique l'interpréteur ne connait pas la méthode à exécute , il est obliger de chercher la dernière méthode redéfinit du type réel de l'objet et de l’exécuter. Ça demande du temps, .... c'est ce qu'on appel une liaison dynamique, et inversement statique pour les non polymorphique. En java, toutes les méthodes sont polymorphique , mais bizarrement les membres ne le sont pas....
Voilà pour l'éffort de pédagogie, j'éspère que t'a tout compris :lahola:
-
Ben ton exemple illustre plutôt l'usage d'une interface, je ne vois pas l'intérêt d'avoir une classe mère pour redéfinir dans les classe filles une méthode abstraite...
Le polymorphisme est intéressant quand tu as un noyau commun à plusieurs objets. Prenons l'exemple d'une personne et d'un employé.
Un employé est assurément une personne mais l'inverse n'est pas vrai.
Donc, tout ce qui concerne une personne (nom, prénom, etc...) se retrouvera dans la classe Personne, les informations spécifiques à son statut d'employé se retrouvant dans une classe Employe (extends Personne).
Bref, l'aspect généralisation / spécialisation n'est pas étranger à l'aspect polymorphisme...
-
OButterlin
je viens de revérifier , et ma définition semble correcte. Après le truc c'est que en java toutes les méthodes sont polymorphe ...
L'usage des interfaces ou des méthodes abstraite , c'est plus de la programmation par contrat. C'est un peux différent, mais ça se base aussi sur le polymorphisme ....
-
je ne conseillerai pas le terme "objet polymorphé" ... disons plutot que les références vers des objets sont "polymorphes".
Qu'est ce que ça veut dire? que tu demandes quelque chose à l'objet qui est à l'autre bout du fil mais que tu n'a pas besoin de connaître la vraie nature de cet objet (découplage entre la demande de service et sa réalisation).
prenons un exemple : tu as un objet qui sait "faire le ménage" ... tu lui demandes de faire le ménage un point c'est tout ("just do it" :ccool:), quelqu'un t'as donné cette référence mais tu n'as pas besoin de savoir que ce quelqu'un est passé de "SUN lave plus blanc" à "XXX (je ne citerai pas de nom ici) nettoie de fond en comble";).
Après la mise en place peut se faire de diverses manières: héritage ou implantation d'une interface.