Interfaz segregation
El principio de segregación de interfaces (ISP) es otro de los cinco principios SOLID de la programación orientada a objetos. Establece que una interfaz no debe obligar a sus clases implementadoras a implementar métodos que no necesiten.
En otras palabras, una interfaz debe dividirse en interfaces más pequeñas y específicas, de modo que cada clase implementadora solo tenga que implementar los métodos que realmente necesite.
Este principio tiene varias ventajas, entre ellas:
- Mejora la mantenibilidad: Si una interfaz está bien segregada, es más fácil realizar cambios en la interfaz sin afectar a las clases implementadoras.
- Mejora la reusabilidad: Las interfaces que están bien segregadas son más fáciles de reutilizar en otros contextos.
- Mejora la flexibilidad: Las interfaces que están bien segregadas son más fáciles de modificar para adaptarse a nuevos requisitos.
Ejemplo 1:
public interface IFigura {
public double CalcularArea();
}
Esta interfaz es demasiado general, ya que obliga a todas las clases que la implementen a implementar el método CalcularArea()
. Esto puede ser un problema si una clase no necesita calcular el área.
Ejemplo 2:
public interface IFiguraGeometrica {
public double CalcularArea();
}
public interface IFiguraConVolumen {
public double CalcularVolumen();
}
Estas interfaces están mejor segregadas, ya que cada una de ellas solo obliga a las clases implementadoras a implementar los métodos que realmente necesitan.
Por ejemplo, una clase que implemente la interfaz IFiguraGeometrica
solo necesita implementar el método CalcularArea()
, mientras que una clase que implemente la interfaz IFiguraConVolumen
también necesita implementar el método CalcularVolumen()
.
Ejemplo 3:
public interface IAnimal {
public void Comer();
}
public interface IAnimalDomestico {
public void LlevarPaseo();
}
public interface IAnimalSalvaje {
public void Cazar();
}
Estas interfaces también están bien segregadas, ya que cada una de ellas solo obliga a las clases implementadoras a implementar los métodos que realmente necesitan.
Por ejemplo, una clase que implemente la interfaz IAnimal
solo necesita implementar el método Comer()
, mientras que una clase que implemente la interfaz IAnimalDomestico
también necesita implementar el método LlevarPaseo()
, y una clase que implemente la interfaz IAnimalSalvaje
también necesita implementar el método Cazar()
.
Como se puede ver en estos ejemplos, el principio ISP puede aplicarse a cualquier tipo de código, desde clases simples hasta sistemas complejos.