terminal

codeando_simple

terminal

menu

terminal

search_module

guest@codeandosimple: ~/system/search $ grep -r "" .

Press [ENTER] to execute search

Status

Engine: Ready

Database: Online

Index: V2.1.0_LATEST

bash — cat interface-segregation.md
guest@codeandosimple: ~/blog/solid $ cat interface-segregation.md

SOLID - INTERFACE SEGREGATION PRINCIPLE_

// "No tienes que ser grande para empezar. Pero tienes que empezar para poder ser grande" - Zig Ziglar

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.

play_circle

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.