Aide En Informatique
Latest Posts:

C'est quoi le polymorphisme en Programmation à Objet (OOP)?
C'est quoi le polymorphisme en Programmation à Objet (OOP)?

Le polymorphisme en OOP, allons y un peu plus en detail?

il m'a été demandé par un de mes folowers d'expliquer en des termes simples le concept de polymorphisme qui fait partire des 3 pilliers de la programmation à objet (OOP) donc j'ai longuement évoqué le concept sur mes postes et surtout dans cet article (https://itinnovdesign.com/demystifions-ensemble-la-programmation-orient%C3%A9e-objet).

Je precises en passant que les sujets sur lesquel je postes, sont le plus souvent des questions faite inbox par de nombreux followers que je decides de les rendre public pour que tout le monde en profite car mon objectif c'est de rendre facile et simple ce qui peut etre beaucoup beaucoup complexe pour pas mal de persones surtout les débutants, en des termes simples terre à terre.

En quoi consiste le polymorphisme et quelle est son utilité en OOP?

Polymorphisme signifit en terre à terre avoir plusieurs forme, c'est à dire etre un, mais se comporter differement en fonction des circonstances, par exemple si vous etes un étudiant, à la maison vous etes le fils de vos parents, à l'université vous etes l'élève de votre professeur, au marché vous devenez le client du boutiquier, à l'hopitale vous devenez le malade du docteur etc.. vous voyez ici que la seule et meme persone en fonction des circonstances, prend plusieurs forme non?

En langage de programmation c'est pareil, pour pouvoir reutiliser les fonctionalités dans une application, on passe souvent par ce qu'on appelle l'heritage, donc si j'ai des objets communs qui ont des fonctionalités comunes, je créer une classe de base ou je mets ces fonctionalités et toutes les classes doivent deriver de cette classe de base pour beneficier de cette fonctionalité comune, par exemple supposons qu'on ait à créer une classe Forme pour dessiner plusieurs types de formes (Rectangle, Carré, triangle etc..) et qui contient une methode Dessine() qui effectivement doit dessiner la forme, la classe forme elle contiendra cette methode que chaque classe dérivée devra la réecrire (ovverwride en anglais) pour se dessiner, donc en c# par exemple on aura quelque chose de ce genre (dans tous les langages ça ne change pas ça se ressemble):

public class Forme

{

public virtual Dessine()

{

Console.WriteLine("dessin forme principale");

}

}

public class Rectangle : Forme

{

public ovverwride Dessine()

{

Console.WriteLine("je suis un rectangle");

}

}

public class Carre : Forme

{

public ovverwride Dessine()

{

Console.WriteLine("je suis un carre");

}

}

public class Triangle : Forme

{

public ovverwride Dessine()

{

Console.WriteLine("je suis un triangle");

}

}

La classe Forme comme vous le voyez contient une methode Dessine, en fait cette classe ne sert à rien d'autre qu'un template/patron pour les classe qui herite d'elle comme Rectangle, Carre, Triangle qui vont redefinir Dessine et dessiner vraiment la vrai forme que l'utilisateur peut voir, le concepteur de la classe forme, sont but était de créer une application qui dessine differents type de Forme sur l'écran, mais comme il ne connait pas à priori quel type de forme le developpeur qui utilisera sa bibliothèque voudra dessiner, alors il a crée la classe de base Forme avec sa methode Dessine et ainsi il peut faire une logique pour dessiner la Forme sans se soucier de quel type de forme sera dessiner, comme Quoi sa Forme de base pourra etre polyforme en fonction des circonstances, donc si un developpeur qui utilise sa bibliothèque veut dessiner un Rectangle, il va deriver le Rectangle de la classe Forme et redefinir la methode Dessine, et l'application au moment de l'execution de la methode dessine, deviendra en un rectangle en ce moment et il en sera de meme quand il s'agira d'un Triangle, ou d'un Carre, donc le concepteur de la bibliothèque de la classe Forme avant de la distribuer la biblothèque aux developpeurs, pourra avoir une fonction de lancement de son projet de dessin ainsi:

public class ProjetLancementDessin

{

public static void Run()

{

List<Forme> listeDesFormesADessiner = new List<Forme>

{

new Rectangle(),

new Triangle(),

new Carre()

};

foreach(var forme in listeDesFormesADessiner )

{

forme.Dessine();

}

}

}

dans ce petit bout de code, le concepteur utilise une strategie en runtime (durant l'execution), pour detecter le type de forme et en fonction de ce type, la fonction Dessine juste est executé, le concepteur peut donc distribuer sa bibliothèque ou son framework sachant que tout developpeur qui veut dessiner n'importe quel type de forme, peut juste deriver de la classe Forme et redefinir la methode Dessine() ainsi son application ou framework de dessin de forme, se comportera differement en fonction du type de forme prevu par le developpeur, voilà à quoi sert le polymorphisme.

Un exemple concret de polymorphisme que vous utilisez sans le savoir tous les jours : avez vous dejà fait une app android avec java? flutter? etc... n'est ce pas sur cette meme page on a fait des app mobiles completes en flutter, java, kotlin, ionic et xamarin avec source code? 

Eh oui prenons juste le code dart d'un widget de flutter

class MyWidget extends StatelessWidget {

@override

Widget build(BuildContext context) {

return Container();

}

}

ça c'est ce que nous en tant que developpeur, on doit ecrire obligatoirement comme code quand on veut utiliser flutter pour faire une app, vous avez remarqué? on herite de StatelessWidget, qui est un classe de base prevu par les concepteurs de flutter, puis on doit refedinir par force la methode Build et c'est dans cette methode qu'on construit notre interface graphique avec les boutons, les menu deroulants etc.. vous pouvez un peu immaginez alors ce que les concepteurs de flutter font dans leur framework et le moteur au lancement de notre app non?, eux ils ne peuvent pas savoir à priori quel sera l'interface de chaque app fait par chaque developpeur, chacun fait sa app en fonction de ses exigences et de sa logique, mais ce sont les concepteurs de flutter qui dans leur moteur/framework doivent lancer et gerer le cycle de vie de cette app, donc pour rendre cela possible et universel, il font donc du polymorphisme en imposant aux developpeurs flutter de deriver de cette classe de base (ce n'est d'ailleur pas la seule), puis de redefinir la methode Build et leur moteur se comportera de manière different en fonction de ce que l'utilisateur aura mis dans la methode build, donc du polymorphisme, la meme chose qui peut prendre plusieurs forme en fonction des circonstances.

voilà une des choses clées de la OOP et des design pattern et tous les framework que vous utilisez au quotidien font exactement ce que je viens de decrire là pour permettre la reusabilité du code et des fonctionalité de leur moteur.

s'il y a des choses qui ne sont pas claire, j'attends les questions en commentaire

Bon Coding

 


Author: admin
11.12.2022, 21:06
Category: Coding
Comments: 0
Views: 315
-

Share

Comments (0)
There are no comments yet.

Leave A Comment
processing...