¿Para qué sirve el principio OCP y cómo aplicarlo?

Contenido del Bootcamp Dirigido por: | Última modificación: 15 de octubre de 2024 | Tiempo de Lectura: 3 minutos

Algunos de nuestros reconocimientos:

Premios KeepCoding

En este post hablaremos sobre uno de los cinco principios fundamentales de la programación orientada a objetos: el principio OCP (Open/Closed Principle). En caso de que aún no lo conozcas, te explicaré para qué sirve, cómo aplicarlo en tus proyectos de Java y cómo este enfoque puede mejorar la calidad de tu código a largo plazo.

qué es el principio OCP

¿Qué es el principio OCP?

El principio OCP, conocido como principio de abierto/cerrado, plantea que deberías poder ampliar tu código sin tener que cambiar lo que ya funciona. ¿Qué significa esto? Que cuando quieras añadir una nueva funcionalidad o adaptar tu programa a cambios, no tendrás que modificar la estructura original del código. Así, te ahorras el riesgo de cometer errores al tocar el código existente.

Este enfoque suele servir mucho en proyectos que están en constante crecimiento, donde los requisitos pueden cambiar de un día para otro. El objetivo de este principio es que puedas añadir nuevas características sin miedo a dañar algo que ya está funcionando bien, haciendo que tu software sea más fácil de mantener y escalar a medida que evoluciona.

¿Para qué sirve el principio OCP en Java?

En Java, te sirve para organizar el código de manera que sea flexible ante cambios, sin tener que modificar lo que ya funciona. Entonces, si trabajas en proyectos grandes, donde los cambios son algo constante, te servirá bastante.

Lo bueno de este principio es que no caes en la típica trampa de agregar un montón de if-else o switch cada vez que necesites añadir algo nuevo. Así que, no se cambia el código que ya está, sino que se extiende creando nuevas clases o métodos para las nuevas funcionalidades. Así, el código original queda intacto y no hay muchos riesgos de errores.

Aplicando el principio OCP

Piensa que vas a desarrollar un sistema para procesar pagos. Inicialmente, solo necesitas manejar pagos con tarjeta de crédito. Podrías empezar con algo tan básico como esto:

public class ProcesadorPagos {
public void procesarPago(String metodoPago) {
if (metodoPago.equals("tarjeta")) {
System.out.println("Procesando pago con tarjeta de crédito");
} else {
System.out.println("Método de pago no soportado");
}
}
}

Te funcionará muy bien mientras tengas un solo método de pago, pero si debes añadir nuevos métodos como Paypal o transferencia bancaria, sería necesario modificar la clase ProcesadorPagos cada vez que agregues un nuevo método y no estarías cumpliendo con el principio OCP.

Mejorando el diseño con el principio OCP

Entonces, lo que harás con el principio OCP será diseñar el sistema para que sea extensible desde el principio. Puedes usar herencia y polimorfismo:

  1. Primero, crea una interfaz que defina el comportamiento común de todos los métodos de pago:
public interface MetodoPago {
void procesar();
}
  1. Luego, crea las implementaciones para cada método de pago. Por ejemplo, para tarjeta de crédito y PayPal:
public class PagoTarjeta implements MetodoPago {
@Override
public void procesar() {
System.out.println("Procesando pago con tarjeta de crédito");
}
}

public class PagoPayPal implements MetodoPago {
@Override
public void procesar() {
System.out.println("Procesando pago con PayPal");
}
}
  1. Ahora, el ProcesadorPagos ya no necesita cambiar cada vez que se agrega un nuevo método de pago. Solo necesitas pasarle una instancia del método de pago adecuado:
public class ProcesadorPagos {
public void procesarPago(MetodoPago metodoPago) {
metodoPago.procesar();
}
}

Como ves, el código queda abierto para la extensión (podemos añadir más métodos de pago creando nuevas clases que implementen la interfaz MetodoPago), pero cerrado para modificaciones (no necesitamos cambiar la clase ProcesadorPagos).

¿Cómo aplicar el principio OCP en Java?

Con estos consejos podrás aplicar el principio OCP en Java, asegurándote de que tu código sea extensible y mantenible:

Usa interfaces y clases abstractas

Las interfaces y clases abstractas te ayudarán a cumplir con el principio OCP. Con ellas logras definir comportamientos generales que luego pueden ser implementados o extendidos por clases específicas, sin modificar el código base.

Aplica el polimorfismo

Al usar polimorfismo, te aseguras de que diferentes objetos respondan de manera adecuada a las mismas llamadas de método, así agregas nuevas funcionalidades sin cambiar el código existente.

Evita largas cadenas de condicionales

Trata de usar clases y métodos extensibles que manejen los diferentes casos para que no uses muchos if-else o switch statements en tu código.

Puedes aprender a aplicar principios como OCP y a dominar el desarrollo en Java, si te inscribes en el Bootcamp de Java Full Stack de KeepCoding. Te enseñaremos todo sobre este lenguaje de programación tan popular y podrás entrar al mundo de la tecnología, donde transformarás tu vida, accediendo a un sector en constante crecimiento con salarios competitivos y estabilidad laboral. ¡No te lo pierdas y da el siguiente paso en tu carrera!

Posts más leídos

¡CONVOCATORIA ABIERTA!

Java y Spring Boot

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado