Principio de Segregación de Interfaces (ISP)
El Principio de Segregación de Interfaces (ISP) establece que las interfaces no deben obligar a las clases que las implementan a depender de métodos que no utilizan. En otras palabras, es mejor tener múltiples interfaces pequeñas y específicas en lugar de una única interfaz grande y general.
- ¿Por qué es importante?
Evita que las clases implementen métodos irrelevantes o vacíos, lo que reduce la complejidad, mejora la claridad y facilita el mantenimiento.
1. Ejemplo 1: Una Interfaz con Métodos No Relevantes #
Código Malo (Violación del ISP) #
Problema: La clase
Cocheestá obligada a implementar el métodovolar, que no tiene sentido para un coche. Esto viola el ISP al hacer queCochedependa de un método que no necesita.
Código Bueno (Aplicando el ISP) #
Solución: Dividimos la interfaz
Vehiculoen dos:Vehiculo(que incluyeacelerar) yVehiculoVolador(que incluyevolar). Ahora las clases solo implementan los métodos relevantes.
2. Ejemplo 2: Una Interfaz Genérica para Dispositivos #
Código Malo (Violación del ISP) #
Problema: La interfaz obliga a implementar métodos que no son necesarios, lo que genera código irrelevante y confuso.
Código Bueno (Aplicando el ISP) #
Solución: Se dividen las responsabilidades en dos interfaces independientes (
ImpresorayEscaner). Esto permite que cada clase implemente solo los métodos que necesita.
3. Beneficios de Aplicar el ISP #
- Menor complejidad: Las clases no están obligadas a implementar métodos irrelevantes.
- Mayor claridad: Las interfaces específicas son más fáciles de entender y usar.
- Facilidad de mantenimiento: Es más sencillo agregar nuevas funcionalidades sin modificar clases existentes.
Siguiendo el Principio de Segregación de Interfaces, tu código será más modular, limpio y enfocado en las necesidades reales de cada clase. 😊
Resumen del tema
Conceptos clave #
- Principio de Segregación de Interfaces (ISP): los clientes no deben ser forzados a depender de interfaces o métodos que no utilizan.
- Interfaces Gordas (Fat Interfaces): contratos sobrecargados que obligan a clases simples a implementar métodos vacíos o lanzar errores de no soportado.
- Interfaces Específicas y Granulares: descomponer contratos amplios en interfaces pequeñas y cohesivas (
Imprimible,Escaneable) que las clases pueden combinar mediante composición o implementación múltiple.
Qué debes recordar #
Crea interfaces pequeñas y específicas para que ninguna clase esté obligada a implementar métodos que no necesita.