SOLID — Princípio da Segregação de Interface

Ruan Pelissoli
Trinca137
Published in
2 min readOct 24, 2019

Neste quarto artigo da série sobre SOLID, vamos falar do Princípio da Segregação de Interface (ISPInterface Segregation Principle).

A teoria do ISP diz que:

No client should be forced to depend on methods it does not use

Clientes de interface (classes) não deveriam ser forçadas a depender de métodos que não irão usar. Cada classe deve implementar somente o necessário, sem qualquer excesso.

Benefícios

O ISP tem como objetivo reduzir os objetos de código até a menor implementação possível e remover as dependências desnecessárias para o funcionamento. Em geral, o resultado da implementação desse princípio resulta em muitas interfaces pequenas e focadas, que definem apenas o que é necessário para suas implementações.

Vamos ver um exemplo de código em C# que viola esse princípio, lembrando que todos os exemplos aqui podem ser reproduzidos em qualquer linguagem orientada a objetos.

Vamos supor que estamos criando um sistemas para impressoras e criamos uma interface para representar as funcionalidades de uma impressora multifuncional:

Vamos criar uma classe MultifunctionPrinter para implementar esses métodos:

Até então tudo certo, uma impressora multifuncional imprime, digitaliza e envia fax. Agora também teremos impressoras padrão, que apenas realizam impressão, ao implementar a interface criada numa classe de impressora padrão temos o seguinte código:

A classe Impressora está sendo forçada a implementar os métodos Scanner e SendFax que ela não irá usar, essa é uma violação do ISP.

Para solucionar isso devemos quebrar nossa interface em interfaces menores para as classes clientes implementarem apenas o que elas precisam:

Agora que quebramos nossas interfaces em partes, a classe MultifunctionPrinter implementaria todas elas:

E a nossa impressora padrão apenas implementaria o necessário para funcionar sem depender de métodos desnecessários:

Assim temos um código que respeita o Princípio de Segregação de Interface.

No próximo artigo vamos falar sobre o Princípio de Inversão de Dependência.

O código desse e de todos os exemplos está no meu Github.

Links para todos os artigos sobre SOLID:

Princípio da Responsabilidade Única (SRP)

Princípio Aberto Fechado (OCP)

Princípio de Substituição de Liskov (LSP)

Princípio da Inversão de Dependência (DIP)

--

--