Princípio da Segregação de Interface (ISP)
Definição
O Princípio da Segregação de Interface (Interface Segregation Principle – ISP) estabelece que nenhuma entidade deve ser forçada a depender de métodos que não utiliza.
Isso significa que é melhor ter várias interfaces específicas e coesas do que uma única interface genérica e inflada. O ISP é o quarto princípio do SOLID, um conjunto de boas práticas para design orientado a objetos.
Por que é importante
Interfaces grandes impõem implementações desnecessárias a classes que não precisam de todos os métodos. Isso aumenta o acoplamento e dificulta a manutenção.
Com interfaces menores e mais focadas, as classes implementam apenas os comportamentos relevantes para o seu papel, favorecendo coesão, legibilidade e evolução do sistema.
Exemplo prático (Python)
Considere uma interface genérica que exige que todos os animais saibam voar:
from abc import ABC, abstractmethod
class Animal(ABC):
@abstractmethod
def comer(self):
pass
@abstractmethod
def voar(self):
pass
Agora veja duas implementações distintas:
class Passaro(Animal):
def comer(self):
print("Bicando sementes")
def voar(self):
print("Voando pelo céu")
class Cachorro(Animal):
def comer(self):
print("Comendo ração")
def voar(self):
raise NotImplementedError("Cachorros não voam")
O Cachorro
é forçado a implementar um método que não faz
sentido — isso viola o ISP. A classe depende de um
comportamento (voar
) que nunca irá utilizar.
Aplicando o ISP, podemos dividir a interface em duas:
class Animal(ABC):
@abstractmethod
def comer(self):
pass
class Voador(ABC):
@abstractmethod
def voar(self):
pass
Agora cada classe implementa apenas os comportamentos relevantes:
class Passaro(Animal, Voador):
def comer(self):
print("Bicando sementes")
def voar(self):
print("Voando pelo céu")
class Cachorro(Animal):
def comer(self):
print("Comendo ração")
Com isso, respeitamos o ISP: Cachorro
não precisa conhecer ou
implementar comportamentos de voo que não fazem sentido para ele. O código
fica mais limpo e alinhado à responsabilidade real de cada classe.