DEV Community

Cover image for [S.O.L.I.D.] Os Cinco Pilares da Programação Orientada a Objetos. [I] - Interface Segregation Principle - ISP
Diego de Sousa Brandão
Diego de Sousa Brandão

Posted on

[S.O.L.I.D.] Os Cinco Pilares da Programação Orientada a Objetos. [I] - Interface Segregation Principle - ISP

Continuando a série sobre SOLID, caso não tenha lido o artigo anterior:

Neste artigo estarei falando sobre o quarto princípio que é:

[I] -Interface Segregation Principle,
Princípio da Segregação de Interfaces - ISP
“os clientes que implementam uma interface não devem ser obrigados a implementar uma ação/método que não utiliza”

Definição: Os clientes não devem ser forçados a depender de interfaces que não utilizam. Em outras palavras, é melhor ter várias interfaces específicas do que uma única interface geral.

Vamos considerar um exemplo do mundo real envolvendo um sistema de gerenciamento de funcionários em uma empresa. Este sistema precisa lidar com diferentes tipos de funcionários, como funcionários regulares, gerentes e funcionários terceirizados. Inicialmente, podemos ter uma interface única para gerenciar todos os tipos de funcionários, mas aplicaremos o ISP para melhorar o design.

Sem ISP
Interface EmployeeManagement sem ISP
Image description

Implementação HRSystem sem ISP
Image description

Neste exemplo, HRSystem é forçado a implementar métodos que não fazem sentido para ele (manageContractors), o que viola o ISP.

Com ISP
Para seguir o ISP, vamos dividir a interface EmployeeManagement em interfaces específicas para diferentes tipos de funcionários.

Interface EmployeeManagement
Image description

Interface ContractorManagement
Image description

Implementação HRSystem com ISP
Image description

Implementação ContractorManagementSystem com ISP
Image description

Uso das Classes
Image description

Explicação:

  • Interface EmployeeManagement: Define operações genéricas para gerenciamento de funcionários, como contratação, atribuição de tarefas, cálculo de salário, etc.
  • Interface ContractorManagement: Define operações específicas para gerenciamento de contratados, como gerenciamento de contratos.
  • Classe HRSystem: Implementa a interface EmployeeManagement, fornecendo métodos para gerenciar funcionários da empresa.
  • Classe ContractorManagementSystem: Implementa a interface ContractorManagement, fornecendo métodos para gerenciar contratados.
  • Uso das Classes: Demonstramos como usar as diferentes classes e interfaces de maneira específica, sem forçar nenhuma classe a implementar métodos desnecessários.

Ao seguir o Princípio da Segregação de Interfaces, garantimos que nossas classes só implementem métodos que fazem sentido para elas, tornando o código mais claro e fácil de manter. Isso evita que classes dependam de métodos que não utilizam, promovendo uma melhor coesão e separação de responsabilidades.

PS: Para ir direto para o próximo princípio:

Top comments (0)