Friday, March 24, 2023

Open–closed principle (OCP)

Sobre el principio

El principio OCP, por sus siglas en inglés "Open-Closed Principle", es uno de los cinco principios SOLID de la programación orientada a objetos. Este principio establece que una entidad de software, ya sea una clase o un módulo, debe estar abierto para la extensión pero cerrado para la modificación. Es decir, se debe poder extender su comportamiento sin necesidad de modificar el código fuente original.


En el mundo real, podemos hacer una analogía con un edificio. Imagine que tiene una casa y desea agregar una habitación extra. Si el diseño de la casa no se hizo pensando en la posibilidad de agregar una habitación, es probable que tenga que modificar la estructura original, lo que podría ser costoso y requerir mucho tiempo. Sin embargo, si el diseño original fue hecho pensando en la posibilidad de futuras ampliaciones, agregar una habitación extra sería mucho más sencillo y económico. De manera similar, en programación, al aplicar el principio OCP, el diseño de la entidad de software debe ser hecho pensando en la posibilidad de futuras extensiones sin necesidad de modificar su código fuente original.

Es importante aplicar el principio OCP porque permite desarrollar software más robusto, mantenible y escalable. Al seguir este principio, se evitan cambios innecesarios en el código fuente original que podrían generar errores inesperados o problemas de compatibilidad. Además, facilita la creación de nuevas funcionalidades sin necesidad de modificar el código existente, lo que ahorra tiempo y recursos.

Sin embargo, también existen algunas desventajas del principio OCP. En ocasiones, al diseñar una entidad de software para ser extensible, se pueden crear abstracciones innecesarias y complejidad adicional en el código. Además, en algunos casos, la implementación de una funcionalidad específica puede ser más compleja debido a la necesidad de respetar la estructura y abstracciones previas.

Ejemplo del uso del OCP

En este ejemplo, la clase "LogManager" es la encargada de registrar los mensajes de log y recibe una lista de objetos que implementan la interfaz "ILogger". La interfaz "ILogger" define el método "Log" que será implementado por cada uno de los loggers disponibles, en este caso, "ConsoleLogger" y "FileLogger".

De esta forma, si en el futuro queremos agregar un nuevo logger, simplemente debemos crear una nueva clase que implemente la interfaz "ILogger" y definir la implementación de "Log". Luego, podemos agregar el nuevo logger a la lista que se le pasa al constructor de "LogManager".

De esta forma, estamos cumpliendo con el principio OCP, ya que nuestro código está cerrado para modificaciones pero abierto para extensiones. Podemos agregar nuevos loggers sin necesidad de modificar el código original de "LogManager".

En resumen...

El principio OCP establece que una entidad de software debe estar abierta para la extensión pero cerrada para la modificación. Al aplicar este principio, se logra un código más robusto, mantenible y escalable. La analogía con el mundo real nos muestra la importancia de diseñar pensando en futuras ampliaciones. Sin embargo, es importante tener en cuenta que también existen desventajas, como la creación de abstracciones innecesarias y complejidad adicional en el código.

No comments:

Post a Comment

Cuando el código funciona, pero no tiene tests: ¿y ahora qué?

Seguramente te ha pasado alguna vez. Te dan acceso al repositorio de un nuevo proyecto. Lo abres con curiosidad, esperas encontrar una estru...