Le polymorphisme en C#

18 Nov
2009

Hier, dans le cadre de mon travail, une personne me demande qu’est ce que le polymorphisme ? Je tente de lui expliquer par mes mots et j’ai la honte de m’embrouiller un peu. C’est vrai que l’on utilise tous ce principe de l’orienté objet mais j’ai été surppris de voir qu’autour de moi, je n’étais pas le seul à m’embrouiller lors des explications.
Le polymorphisme est un principe général de l’Orienté objet, il n’est pas propre au C#.

L’explication façon analyste (UML) est la suivante :

Le polmymorphisme est le fait qu’un même message puisse être interprété de differentes façons en fonction de l’object qui recoit ce message.

Le message dans cette définition est un appel vers un méthode en C#.

Pour comprendre, prenons un exemple concret :

Modélisons le problème suivant :

  • Les chiens et les chats sont des animaux.
  • Je sais qu’un animal s’exprime mais je ne sais pas comment il s’exprime.
  • Je sais que le chien aboie.
  • Je sais que le chat miaule.

Prenons une classe de base :

animal

Maintenant modélisons la classe Chat et la Classe chien.

chat

chien

Maintenant que nous avons modélisé la superclasse et les classes concrètes qui héritent de cette superclasse.

Nous pouvons utiliser ces classes concrètes. Par exemple créons une liste d’animaux comprenant des chiens, des chats et des animaux non-identifiés.

implementation

Dans ma liste d’animaux, peu importe que la classe concrète soit un Chien, un Chat ou un animal, ce que je récupère est un Animal. Comme la méthode MakeNoise() est définie dans le classe Animal, je peux donc l’invoquer. Si c’est un chat qui a été instancié, le chat miaulera. Si c’est un chien, celui-ci aboiera. Ci ce n’est ni l’un, ni l’autre, nous ne serons pas comment il fait du bruit car le cri dépend de l’animal.

Et voici le résultat de notre exemple :

result

En conclustion, le polymorphisme évite de tester le type d’objet concret que l’on manipule, lorsque l’on exécutera un de ses méthodes spécialisées, c’est le polymorphisme qui exécutera le code spécifique (ceci grâce au balise virtual et override).

Comment Form

top