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.