SOLID — Princípio da Segregação de Interface
Neste quarto artigo da série sobre SOLID, vamos falar do Princípio da Segregação de Interface (ISP — Interface 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)