El Interface Segregation Principle (ISP) o Principio de Segregación de Interfaces establece que ningún cliente debería verse forzado a depender de métodos que no utiliza.
Reproducir video explicativo
En términos más simples, el ISP sugiere que en lugar de tener una interfaz grande que todos los clientes deben implementar, es mejor tener varias interfaces pequeñas y específicas para cada cliente.
# ¿Segregación y Dependencia?
- Segregación: Dividir interfaces grandes en más pequeñas y específicas.
- Dependencia: Los clientes solo deben conocer las partes que realmente necesitan y usan.
El Interface Segregation Principle apunta a reducir las dependencias innecesarias entre los clientes y las abstracciones, lo que lleva a sistemas más desacoplados y fáciles de refactorizar, cambiar y desplegar.
# ¿Por qué es importante?
Flexibilidad
Menos dependencias innecesarias llevan a un sistema más flexible y adaptable.
Mantenibilidad
Las modificaciones son más fáciles ya que los cambios en una interfaz no afectan a clientes que no la usan.
Claridad
Las interfaces pequeñas y bien definidas son más fáciles de entender y usar correctamente.
# Síntomas de que no se cumple
Podemos identificar cuándo no estamos respetando el Interface Segregation Principle:
- Clases que implementan interfaces pero solo usan algunos de los métodos proporcionados.
- Cambios en una interfaz que afectan a clientes que no usan los métodos modificados.
- Dificultad para entender qué métodos de una interfaz son realmente relevantes para un cliente específico.
Ejemplo
Imagina un sistema para gestionar trabajadores en una empresa.
Sin Interface Segregation Principle (Fat Interface)
public interface Worker { void work(); void eat(); void takeBreak(); // ... otros métodos }
Algunos trabajadores no necesitan todos estos métodos (ej. un RobotWorker no necesita comer ni descansar), pero están forzados a implementarlos de todos modos.
Con Interface Segregation Principle (Split Interfaces)
Dividimos Worker
en varias interfaces pequeñas y específicas:
public interface Workable { void work(); } public interface Eatable { void eat(); } public interface Breakable { void takeBreak(); }
Ahora, cada tipo de trabajador solo implementa las interfaces que corresponden a sus responsabilidades reales.
Conclusiones
Al implementar el Interface Segregation Principle, aseguramos que los clientes solo dependan de las interfaces que realmente utilizan, lo que reduce el acoplamiento y mejora la cohesión del sistema. Esto facilita cambios y mejoras, y hace que el sistema sea más comprensible y mantenible.
Resumen
El ISP es crucial para crear sistemas flexibles y mantenibles. Promueve la creación de interfaces pequeñas y específicas que los clientes pueden implementar sin verse sobrecargados por métodos innecesarios. Al seguirlo, mejoramos la claridad y reducimos el riesgo de efectos secundarios no deseados ante cambios.