Polymorphisme en "orienté-objet"
Le polymorphisme permet d'utiliser de manière uniforme des objets très différents. C'est donc un moyen de manipuler des objets hétéroclites de la même manière, pourvu qu'ils disposent d'une souche commune.
Quand nous définissons pour une sous classe une méthode de même signature (qui porte le même nom, retourne le même type de valeur, et possède le même nombre et les même types d'arguments) qu'une méthode définie dans une super-classe, c'est la définition de méthode trouvée en premier (en partant de notre position dans la hiérarchie et en remontant vers la super classe) qui est utilisée.
Overriding (ou polymorphisme d'héritage)
Quand le terme polymorphisme est évoqué pour se référer à la capacité qu'à un objet d'être considéré en tant qu'objet d'un autre niveau de sa hiérarchie (niveau supérieur), il s'agit du polymorphisme d'héritage, ou overriding.
Mais que veut-il dire par là ?
Reprenons notre exemple de classes Presonne, et Lecteur.
Si nous désirons dénombrer dans un programme les objets de la classe Personne, nous pouvons prendre en compte les objets de la classe Lecteur car ils sont aussi des personnes.
Nous pouvons donc utiliser les objets de la classe Lecteur en tant qu'objets de la classe Personne, et nous utilisons une seule méthode compter(). C'est l'aspect overriding (polymorphisme d'héritage) du concept de polymorphisme.
Remarques
Le fait de considérer par exemple que le lecteur est une personne est juste, car tous les lecteurs possèdent toutes les caractéristiques et les comportements d'une personne.
Considérer qu'une personne est un lecteur est impossible, car toutes les personnes ne possèdent pas forcément une date d'inscription, ni une collection de livres. Nous ne pouvons donc pas créer une nouvelle personne de type lecteur, mais nous pouvons créer un nouveau lecteur de type personne.
Si nous considérons un lecteur comme une personne, nous ne pouvons plus employer son attribut qui signale qu'il possède une date d'inscription et une collection de livres. Nous généralisons l'objet et perdons ainsi accès à ses spécialités.
Dans le cas d'un overriding de méthode, la signature de la méthode est identique (elle porte le même nom, retourne le même type de valeur, et possède le même nombre et les même types d'arguments). C'est l'implémentation interne de la méthode qui diffère.
Overloading (ou surcharge)
Nous retrouvons l'overloading dans les termes français de surcharge, ou de polymorphisme ad hoc.
Dans le cas d'un overloading, le nom de méthode est identique, mais la signature de la méthode diffère dans le nombre ou le type d'arguments, ou la valeur retournée.
ttention que dans certains langages comme Java, le type de retour d'une méthode ne fait pas partie de la signature. L'overloading n'est possible dans ce cas que au niveau des arguments.
NB : les exemples mentionnent des polymorphismes au niveau des méthodes, mais nous pouvons aussi appliquer ce concept par exemple au constructeur.
Polymorphisme généralisé
Certains concepts de l'orienté objet ne sont pas supportés par tous les langages. Par exemple, le concept de polymorphisme généralisé n'est pas pris en compte dans le langage Java.
Version en cache
21/12/2024 17:24:32 Cette version de la page est en cache (à la date du 21/12/2024 17:24:32) afin d'accélérer le traitement. Vous pouvez activer le mode utilisateur dans le menu en haut pour afficher la dernère version de la page.Document créé le 17/04/2005, dernière modification le 07/04/2023
Source du document imprimé : https://www.gaudry.be/oriente-objet-polymorphisme.html
L'infobrol est un site personnel dont le contenu n'engage que moi. Le texte est mis à disposition sous licence CreativeCommons(BY-NC-SA). Plus d'info sur les conditions d'utilisation et sur l'auteur.