Como aplicar el Principio Open Close

Principio open close

Open Close Principle. El principio Open Close se refiere a que una entidad de software debe de estar abierta a la expansión y cerrada a la modificación. ¿Que quiere decir esto? Para Aplicar el principio Open Close deberíamos agregar nuevas clases y métodos sin modificar el comportamiento de los ya existentes.

Una manera simple y efectiva para poner el practica este principio es usar interfaces y así delegar la funcionalidad a los objetos de que implementan.

Se debemos tener cuidado al intentar cumplir con este principio. Si exageramos en la aplicación del Principio Open Close podemos hacer ilegible e incluso mas difícil de mantener. Pero entonces, ¿Cuando debemos de aplicar el principio Open Close? Si durante la construcción del software se ha modificado el mismo método/clase o si de antemano sabes que con el paso del tiempo se agregaran nuevas funcionalidades entonces ese método/clase es candidata a la aplicación de dicho principio.

Ejemplo:

Supongamos que necesitamos crear un modulo que calcule el área de un circulo y creamos el siguiente código.

Pero tiempo después tenemos la necesitada de calcular el área de un triangulo. Posiblemente crearíamos un código como este.

Lo primero que notamos es que al método getArea(IShape shape) le agregamos el método if para identificar el tipo de figura al que le debemos calcular el área. Esto lo tendríamos que hacer para cada nueva figura que a la cual le debamos calcular el área. Esto rompe con el principio al ser un método propenso a la modificación constante.

Para cumplir con el principio principio debemos cerrar la opción a la modificación y abrirlo a la expansión. El siguiente código es un buen ejemplo de como hacerlo.

De esta manera cada vez que debamos calcular el área de una nueva figura podemos agregar una nueva clase (abierto a la expansión) y ya no necesitamos modificar la clase calculateArea(IShape shape) (cerrada a la modificación).

El ejemplo completo lo puedes encontrar en mi GitHub.

https://github.com/eduesqui/solidExamples

0 Shares:
You May Also Like