Principio de Abierto/Cerrado (OCP)
El Principio de Abierto/Cerrado (OCP) establece que las clases, módulos o funciones deben estar abiertas para la extensión, pero cerradas para la modificación. Esto significa que puedes extender su funcionalidad sin cambiar su código existente.
- ¿Por qué es importante?
Permite agregar nuevas funcionalidades sin afectar el comportamiento ya implementado, reduciendo el riesgo de errores y facilitando el mantenimiento.
1. Ejemplo 1: Una Clase sin Cumplir el OCP #
Código Malo (Violación del OCP) #
Problema: Si necesitas agregar una nueva operación (por ejemplo, multiplicación o división), tendrías que modificar el método
calcular. Esto viola el principio porque el código no está cerrado para modificaciones.
Código Bueno (Aplicando el OCP) #
Solución: Ahora, puedes agregar nuevas operaciones (como multiplicación o división) creando nuevas clases que implementen la interfaz
Operacion(o hereden de la clase base en JavaScript y Python). No necesitas modificar la claseCalculadora.
2. Ejemplo 2: Extensión sin Modificación #
Código Malo (Violación del OCP) #
Problema: Si quieres agregar soporte para otro tipo de documento, tendrías que modificar el método
imprimir, lo cual no cumple con el OCP.
Código Bueno (Aplicando el OCP) #
Solución: Cada tipo de documento tiene su propia implementación de impresión, y la clase
Impresorasolo delega la responsabilidad. Esto cumple con el OCP porque agregar un nuevo tipo de documento no requiere modificar la claseImpresora.
3. Beneficios de Aplicar el OCP #
- Escalabilidad: Agregar nuevas funcionalidades es más fácil.
- Menor riesgo de errores: No necesitas modificar el código existente.
- Mantenimiento más sencillo: Cada clase o módulo tiene una única responsabilidad y es extensible.
Aplicando el Principio de Abierto/Cerrado, puedes desarrollar sistemas más robustos y flexibles, listos para adaptarse a futuros cambios sin comprometer su estabilidad. 😊
Resumen del tema
Conceptos clave #
- Principio Abierto/Cerrado (OCP): las entidades de software deben estar abiertas para su extensión, pero cerradas para su modificación.
- Extensión mediante Polimorfismo e Interfaces: añadir nuevos comportamientos creando nuevas clases derivadas o estrategias sin alterar las clases existentes.
- Eliminación de Condicionales de Tipo: previene modificar clases centrales cada vez que se introduce una nueva variante (como nuevos formatos de documentos o pasarelas de pago).
Qué debes recordar #
Diseña componentes extensibles mediante abstracciones e interfaces para incorporar nuevas funcionalidades sin modificar código probado y en producción.