Bonne compréhension de la POO

28/02/2013 09:48

Pour illustrer l'utilité de la POO (Programmation Orientée Objet) le plus parlant c'est de prendre l'exemple des jeux vidéos.

 

Voici l'exemple d'un jeu très simple : Il y'a des soldats, des tanks et des avions qui sont tous des unités.

Les caractéristiques communes à toutes les unités c'est d'avoir une image (sprite) et une vitesse de déplacement.

Ensuite chaque type d'unité à des constantes qui lui est propre : par exemple altitude pour l'avion ou blindage pour le tank.

Puis pour chaque occurrence d'untié (instance) il y'aura des attributs qui sont propres à cette occurrence : coordonnées sur la carte, orientation, %age de santé.

Il y a une classe de base ClasseUnite dont dérivent les classes ClasseSoldat, ClasseTank, ClasseAvion.

 

 

Les concepteurs du jeu estiment que trois types d'unité c'est un peu léger et décident d'agrandir la famille. Ils modifient le diagramme des classes ainsi :

 

C'est la même chose que le premier shéma mais en plus complexe, chaque classe héritant des caractéristiques de la classe dont il dérive. Plus on va vers le bas du shéma, plus l'objet est spécialisé et a des caractéristiques précises.

 

Sur le "terrain" voici ce que ça pourrait donner :

A savoir une mutitude de clônes d'objets de même type (instances) ayant chacun leurs propres attributs.

 

Des méthodes "à tous les étages" :

 

De même les méthodes peuvent être implémentées à différents niveaux  :

 

Par exemple le concepteur de jeu estime que toutes les unités se déplacent de la même manière (animation graphique) :

Alors la méthode Deplacer() sera implémentée dans la classe de base UNITE. Ce sera cette méthode qui sera appelée lors du déplacement de chaque unité, quelle que soit son type.

 

Imaginons maintenant que les soldats se déplacent différemment des véhicules mais que chaque véhicule a un déplacement qui lui est propre :

On aura : méthode Deplacer() dans les classes SOLDAT, CAMION,CHAR LEGER et CHAR LOURD.

Par contre on peut considérer que la détection du type de terrain est commune à tous les véhicules. La méthode DetecteTerrain() sera implémentée dans la classe VEHICULE. De même la fonction de tir de chaque type de soldat sera différente : on la trouvera donc dans FUSILLER, MITRALLEUR et SNIPER.

Etc...

 

Ci-dessous une illustration d'implémentation de ces méthodes, sachant que chaque instance exécutera la méthode la plus proche d'elle dans la hiérarchie des classes.

 

Quel rapport entre des bidasses et un module de gestion de factures ?

 

Là je vous parle de soldats et de tanks (ça marche aussi avec des Bisounours ou des Trolls) mais cette façon de concevoir peut s'appliquer à une application de gestion.

 

Personnellement cette manière de conceptualiser et de visionner les choses (très proche de la vie en fait) est devenue l'évidence-même et il me serait très difficile de retourner à du code procédural.

 

La suite ici : La POO adaptée à la gestion