No cache version.

Caching disabled. Default setting for this page:enabled (code LNG204)
If the display is too slow, you can disable the user mode to view the cached version.

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.

Contents Haut

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.

Contents Haut

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.

English translation

You have asked to visit this site in English. For now, only the interface is translated, but not all the content yet.

If you want to help me in translations, your contribution is welcome. All you need to do is register on the site, and send me a message asking me to add you to the group of translators, which will give you the opportunity to translate the pages you want. A link at the bottom of each translated page indicates that you are the translator, and has a link to your profile.

Thank you in advance.

Document created the 17/04/2005, last modified the 07/04/2023
Source of the printed document:https://www.gaudry.be/en/oriente-objet-polymorphisme.html

The infobrol is a personal site whose content is my sole responsibility. The text is available under CreativeCommons license (BY-NC-SA). More info on the terms of use and the author.