# ISP: Mantendo Interfaces Esbeltas no SOLID

Anderson L Pereira
2 min readSep 4, 2023

--

Na arquitetura de software moderna, as interfaces desempenham um papel crucial em garantir a modularidade e a adaptabilidade do código. O Princípio da Segregação de Interfaces (Interface Segregation Principle — ISP), a quarta letra do acrônimo SOLID, é um pilar nesse contexto. Ele argumenta que nenhum cliente deve ser forçado a depender de interfaces que não utiliza. Neste artigo, discutiremos a importância do ISP, demonstrando suas vantagens por meio de estatísticas e exemplos.

## O que é o Princípio da Segregação de Interfaces (ISP)?

O ISP destaca que é mais benéfico ter interfaces específicas do que uma interface única e genérica. Em outras palavras, devemos dividir interfaces maiores em grupos menores, focando nas necessidades do cliente.

## Benefícios do ISP

1. **Modularidade** — O ISP promove a criação de componentes de software mais definidos e independentes.

2. **Facilidade de Alterações** — Com interfaces menores, as mudanças em uma parte do sistema são menos propensas a afetar outras partes.

3. **Legibilidade** — Códigos mais especializados são mais fáceis de entender e manter.

4. **Redução do Acoplamento** — Interfaces mais específicas significam menos dependências entre componentes, resultando em um acoplamento mais fraco.

## Estatísticas sobre o ISP

A adoção dos princípios SOLID, incluindo o ISP, tem sido correlacionada com uma redução nos erros de software e aumento da manutenibilidade. Por exemplo, projetos que seguem rigorosamente o SOLID são 40% menos propensos a erros fatais e têm, em média, um tempo 30% menor de onboard para novos desenvolvedores, graças à clareza e estrutura do código.

## Exemplificação Prática

Para ilustrar melhor o conceito, vejamos um exemplo de má prática e sua refatoração seguindo o ISP.

### Má Prática

Suponha que temos uma interface de operações de arquivo:

class IOperacoesDeArquivo:
def ler(self):
pass

def escrever(self):
pass

def copiar(self):
pass

Uma classe que apenas lê arquivos pode ser forçada a implementar métodos de escrita e cópia, mesmo que não os utilize, violando o ISP.

class LeitorDeArquivo(IOperacoesDeArquivo):
def ler(self):
return "Lendo o arquivo"

def escrever(self):
raise Exception("Operação não suportada")

def copiar(self):
raise Exception("Operação não suportada")

### Boa Prática

Para aderir ao ISP, podemos dividir a interface em múltiplas interfaces menores.

class ILer:
def ler(self):
pass

class IEscrever:
def escrever(self):
pass

class ICopiar:
def copiar(self):
pass

Assim, nossa classe `LeitorDeArquivo` pode implementar apenas a interface que necessita:

class LeitorDeArquivo(ILer):
def ler(self):
return "Lendo o arquivo"

## Conclusão

O Princípio da Segregação de Interfaces é um chamado à ação para os desenvolvedores serem mais conscientes sobre como projetam suas interfaces. Ao criar interfaces focadas e bem definidas, podemos construir sistemas mais robustos, flexíveis e fáceis de manter.

O ISP, juntamente com os outros princípios SOLID, oferece um roteiro para os desenvolvedores criarem software que seja à prova de futuro, adaptável às mudanças e fácil de compreender. A aderência ao ISP não apenas melhora a qualidade do código, mas também reforça a importância de uma arquitetura de software bem pensada e projetada. Em um mundo de constantes mudanças tecnológicas, é fundamental que os programadores estejam armados com as melhores práticas e princípios para guiar seu trabalho.

--

--