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.

Inhoudsopgave 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.

Inhoudsopgave 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.

Nederlandse vertaling

U hebt gevraagd om deze site in het Nederlands te bezoeken. Voor nu wordt alleen de interface vertaald, maar nog niet alle inhoud.

Als je me wilt helpen met vertalingen, is je bijdrage welkom. Het enige dat u hoeft te doen, is u op de site registreren en mij een bericht sturen waarin u wordt gevraagd om u toe te voegen aan de groep vertalers, zodat u de gewenste pagina's kunt vertalen. Een link onderaan elke vertaalde pagina geeft aan dat u de vertaler bent en heeft een link naar uw profiel.

Bij voorbaat dank.

Document heeft de 17/04/2005 gemaakt, de laatste keer de 07/04/2023 gewijzigd
Bron van het afgedrukte document:https://www.gaudry.be/nl/oriente-objet-polymorphisme.html

De infobrol is een persoonlijke site waarvan de inhoud uitsluitend mijn verantwoordelijkheid is. De tekst is beschikbaar onder CreativeCommons-licentie (BY-NC-SA). Meer info op de gebruiksvoorwaarden en de auteur.