Article image
Renan Gomes
Renan Gomes15/11/2023 19:05
Compartilhe

O Que São os Princípios SOLID

    Introdução

    Na Programação Orientada a Objetos (POO), os princípios SOLID desempenham um papel importante na construção de sistemas eficientes, flexíveis e de fácil manutenção. Este artigo explorará o que é o SOLID e examinará cada um dos seus cinco princípios: SRP, OCP, LSP, ISP e DIP.

     

    O que é SOLID

    SOLID é um acrônimo criado por Michael Feathers que representa cinco princípios de OOP, que por sua vez foram enunciados por Robert C. Martin em seu artigo The Principles of OOD. Esses princípios são diretrizes destinadas a melhorar a qualidade e a manutenibilidade do código. Vamos explorar cada um deles.

     

    Single Responsibility Principle (SRP)

    Princípio da Responsabilidade Única: Uma classe deve ter um, e somente um, motivo para mudar.

    Explicação: O SRP enfatiza a importância de manter coesão em uma classe, concentrando-se em uma única responsabilidade. Isso facilita a manutenção, reduz conflitos de código e torna as classes mais compreensíveis.

    Exemplo de Aplicação: Considere uma classe GestorDeArquivos que lida tanto com a leitura quanto com a escrita de arquivos. Aplicando o SRP, poderíamos dividir isso em duas classes, LeitorDeArquivos e EscritorDeArquivos, cada uma com a responsabilidade única de lidar com a leitura e escrita, respectivamente.

     

    Open/Closed Principles (OCP)

    Princípio Aberto-Fechado: Objetos ou entidades devem estar abertos para extensão, mas fechados para modificação.

    Explicação: O OCP incentiva a extensibilidade do código sem alterar classes existentes. Isso é alcançado por meio do uso de interfaces, classes abstratas e padrões de design que permitem adicionar novos recursos sem modificar o código existente.

    Exemplo de Aplicação: Suponha que temos uma classe CalculadoraDeDesconto que calcula descontos com base no tipo de cliente. Em vez de modificar essa classe toda vez que precisamos adicionar um novo tipo de desconto, podemos criar novas classes de desconto que estendem uma interface comum, mantendo a classe original fechada para modificações.

     

    Liskov Substitution Principle (LSP):

    Princípio da substituição de Liskov: Uma classe derivada deve ser substituível por sua classe base.

    Explicação: O LSP garante que a herança não introduza comportamentos inesperados. Se uma classe base for substituída por uma subclasse, o código deve continuar funcionando corretamente sem surpresas indesejadas.

    Exemplo de Aplicação: Considere as classes Retângulo e Quadrado, onde Quadrado é uma subclasse de Retângulo. Se a lógica de negócios espera um objeto do tipo Retângulo, o LSP garante que podemos substituir isso por um objeto do tipo Quadrado sem causar problemas na funcionalidade esperada.

     

    Interface Segregation Principle (ISP)

    Princípio da Segregação da Interface: Uma classe não deve ser forçada a implementar interfaces e métodos que não irá utilizar.

    Explicação: O ISP destaca a importância de interfaces coesas e específicas para evitar que as classes sejam forçadas a implementar métodos irrelevantes. Isso promove uma implementação mais limpa e evita a poluição de código desnecessária.

    Exemplo de Aplicação: Suponha que temos uma interface Trabalhador com métodos trabalhar e cantar. Se uma classe Engenheiro não precisa do método cantar, aplicando o ISP, podemos dividir essa interface em interfaces menores, como Trabalhador e Cantor, permitindo que as classes implementem apenas o que é relevante para elas.

     

    Dependency Inversion Principle (DIP)

    Princípio da Inversão de Dependência: Dependa de abstrações e não de implementações.

    Explicação: O DIP propõe que módulos de alto nível, responsáveis pela lógica de negócios e funcionalidades abstratas, não devem depender de módulos de baixo nível, que lidam com detalhes específicos de implementação, mas ambos devem depender de abstrações. Isso reduz a dependência direta entre classes concretas, tornando o sistema mais flexível e adaptável a mudanças.

    Exemplo de Aplicação: Em vez de uma classe de alto nível depender diretamente de uma classe de baixo nível, podemos introduzir uma interface ou classe abstrata comum entre elas. Isso permite que a classe de alto nível dependa da abstração, não da implementação específica de baixo nível.

     

    Conclusão

    Compreender e aplicar os princípios SOLID na OOP é fundamental para criar sistemas robustos e flexíveis. Ao adotar esses princípios, os desenvolvedores podem escrever um código mais limpo e compreensível, resistente a mudanças.

    Compartilhe
    Comentários (0)