Comment passer d'une programmation procédurale besogneuse à une POO élégante
Je vous propose un cas simple : nous devons créer un fichier texte avec les totaux annuels par client afin de le transmettre à un logiciel de compta. Mais comme ce fichier peut être transmis à deux comptas différentes sa structure diffère selon le cas.
Compta A :
Nom du client sur 30 car alphanum + TAB + Montant TTC + RC
Compta B :
Code ligne = "1" + "|" + Nom du client sur 25 car alphanum majuscule + "|" + Montant TTC + RC
De plus la Compta B nécessite une dernière ligne avec le total TTC sous forme : Code ligne = "2" + "|" + Total TTC + RC
Code procédural :
(en partant du principe que le programmeur a fait une seule procédure pour l'écriture des deux fichier)
On constate qu'il y a des tests un peu partout. Plus le code sera complexe, plus ces tests dans le corps du programme compliqueront la lecture et la mise au point de l'algorithme.
Programmation Orientée Objet (POO) :
On peut constater que l'écriture de ces fichiers est presque identique. Dans les deux cas on créé le fichier, on écrit des choses dedans à partir des mêmes données et on le ferme. Seul le contenu diffère.
On va donc créer une classe ClasseFichierCompta qui permet de gérer des fichiers de type comptabilité.
Entouré en bleu les méthodes communes : dans tous les cas l'ouverture et la fermeture du fichier se fera de la même manière.
Entouré en rouge les méthodes spécifiques : le mot VIRTUELLE indique que la méthode peut être surchargée, c'est à dire que ce sera la méthode de la classe dérivée qui sera exécutée si elle existe.
Classe dérivée : ClasseFichierCompta_ Type_A
Entouré en magenta : on lui dit de quelle classe elle hérite, ce qui est la synatxe pour lui dire qu'est est dérivée de telle classe.
Entouré en rouge : les méthodes qui seront appelées à la place ce celles décrites dans la classe de base (celle dont elle est dérivée).
Classe dérivée : ClasseFichierCompta_ Type_B
Fonctionne exactement pareil que ClasseFichierCompta_ Type_A.
En orange : déclaration et utilisation d'une variable membre spécifique pour les besoins de cette classe.
Et pour finir le code de traitement :
En rouge une manière d'instancier une classe en dynamique. Il aurait été aussi possible de transmettre oClasse en paramètre.
Remarquer que le corps du programme est beaucoup plus lisible, mieux perceptible en un coup d'oeil et que la complexité du code est désormais rangée dans des méthodes spécialisées.