Le principe ouvert-fermé en pratique | C#

Le principe ouvert-fermé en pratique | C#

Introduction

Dans cet article, nous allons discuter du principe ouvert-fermé  avec un exemple en C#. Veuillez lire notre article précédent avant de passer à cet article où nous avons discuté de la responsabilité unique. La lettre O dans SOLID signifie en anglais “Open”, représente le principe ouvert-fermé.

Quel est le principe ouvert-fermé en C #  ?

Le principe ouvert / fermé, tel que formulé à l’origine par Bertrand Meyer, stipule qu’une entité logicielle donnée doit être ouverte pour extension, mais fermée pour modification. 

Essentiellement, toute classe donnée (ou module, ou fonction, etc.) devrait permettre d’étendre ses fonctionnalités, mais pas de modifier son propre code source.

Comment pouvons-nous atteindre le principe ouvert-fermé C#  ?

Le moyen le plus simple d’implémenter le principe ouvert-fermé en C # est d’ajouter les nouvelles fonctionnalités en créant de nouvelles classes dérivées qui devraient être héritées de la classe de base d’origine.

Une autre façon est de permettre au client d’accéder à la classe d’origine avec une interface abstraite.

Lorsqu’il y a un changement d’exigence ou qu’une nouvelle exigence survient, au lieu de toucher à la fonctionnalité existante, il est toujours préférable de créer de nouvelles classes dérivées et de laisser l’implémentation de classe d’origine telle quelle.

Exemple d’implémentation

Nous allons d’abord montrer un scénario qui enfreint OCP, puis nous supprimerons cette violation.

public class Rectangle{ public double Width {get; set;} public double Height {get; set;} } public class Circle{ public double Radious {get; set;} } public double getArea (object[] shapes){ double totalArea = 0; foreach(var shape in shapes){ if(shape is Rectangle){ Rectangle rectangle = (Rectangle)shape; totalArea += rectangle.Width * rectangle.Height; } else{ Circle circle = (Circle)shape; totalArea += circle.Radious * circle.Radious * Math.PI; } } }
Code language: JavaScript (javascript)

Si nous devons calculer un autre type d’objet, nous devons ajouter une autre condition. Mais d’après les règles de principe ouvert-fermé, nous savons que les entités logicielles doivent être fermées pour modification. Donc, cela viole le principe OC.

Essayons de résoudre cette violation en implémentant OCP. Regardez le code ci-dessous :

public abstract class shape{ public abstract double Area(); } public class Rectangle : shape{ public double Width {get; set;} public double Height {get; set;} public override double Area(){ return Width * Height; } } public class Circle : shape{ public double Radious {get; set;} public override double Area(){ return Radious * Radious * Math.PI; } } public double getArea (shape[] shapes){ double totalArea = 0; foreach(var shape in shapes){ totalArea += shape.Area(); } return totalArea; }

Si nous devons calculer un autre type d’objet, nous n’avons pas besoin de changer de logique dans la méthode getArea (). Nous avons juste besoin d’ajouter une autre classe comme Rectangle ou Circle.

Conclusion

Le principe ouvert/fermé est un excellent guide pour simplifier la mise en œuvre des extensions et minimiser le travail que nous devons faire en tant que programmeurs pour apporter des modifications à chaque fois qu’elles surviennent.

J’espère que cet article vous aide à comprendre le principe ouvert-fermé un peu plus en détails. Vos commentaires et critiques constructives sont toujours appréciés.

Partagez !

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *