Question

Quel est le problème avec l'extrait de code suivant ? Comment allez-vous procéder pour le refactoriser ?



Réponse

Le code ci-dessus viole Open Closed Principle (OCP). Au fil du temps, vous voudrez peut-être ajouter plus d'animaux comme le chien, le crabe, un dragon, etc.

Digital Growing Academy vous offre une formation gratuite sur les principes de développement POO, n'hésitez pas à y inscrire, c'est gratuit :) .

avec un nombre de pattes différent. Cela vous obligera à modifier la méthode count (…) de la classe AnimalLegCounter avec plus d'instructions else-if comme :

Cela montre que la classe AnimalLegCounter n'est pas fermée pour modification car vous devrez la modifier pour l'étendre. En d'autres termes, cela signifie qu'elle n'est pas ouverte à l'extension. L'exemple ci-dessus est trivial, mais dans les applications du monde réel, la base de code peut être 10 à 1000 fois plus grande et la modification d'une classe n'est pas une tâche triviale.

Chaque fois que vous voyez de nombreuses instructions if / else ou switch, vous devez penser au polymorphisme. Le code ci-dessous montre comment la logique de comptage des pattes peut être déplacée vers la méthode count () dans les classes Animal individuelles, et la méthode count () de la classe AnimalLegCounter utilise uniquement la méthode count () dans les classes Animal pour la faire adhérer au principe OCP en utilisant le polymorphisme comme indiqué ci-dessous.



Maintenant, si vous souhaitez ajouter plus d'animaux comme le chien, le crabe, etc., tout ce que vous avez à faire est d'ajouter les classes pertinentes comme Dog, Crab, etc. implémentant la même interface Animal, et de fournir l'implémentation de la méthode count (…). La classe AnimalLegsCounter n'a pas du tout besoin d'être modifiée. En d'autres termes, la classe AnimalLegsCounter est fermée pour modification mais ouverte par extension par l'ajout de nouvelles classes.

Pour plus de détails sur les principes de développement POO, vous pouvez s'inscrire sur notre formation gratuite Tips POO Vs PF pour réussir ton entretien Java