SOLID: Princípio da Inversão da Dependência

Princípio da Inversão da Dependência e exemplos de implementação em Java 09 de agosto de 2023

O Princípio da Inversão da Dependência (Dependency Inversion Principle - DIP) é um dos princípios fundamentais do SOLID, um conjunto de diretrizes para desenvolvimento de software orientado a objetos. O Princípio da Inversão da Dependência estabelece que módulos de alto nível não devem depender de módulos de baixo nível, e sim de abstrações. Neste artigo, vamos explorar o Princípio da Inversão da Dependência e discutir exemplos práticos de sua implementação.

O Princípio da Inversão da Dependência propõe que as entidades de nível superior não devam depender diretamente das entidades de nível inferior. Em vez disso, ambas devem depender de abstrações. Isso permite que as dependências sejam invertidas, facilitando a extensibilidade, testabilidade e manutenção do código.

Exemplos:

  1. Exemplo de violação do Princípio da Inversão da Dependência:

     class Motor {
         public void ligar() {
             // Implementação para ligar o motor
         }
     }
        
     class Carro {
         private Motor motor;
        
         public Carro() {
             this.motor = new Motor();
         }
        
         public void ligarCarro() {
             motor.ligar();
         }
     }
    

    Nesse exemplo, a classe Carro possui uma dependência direta da classe Motor, criando um acoplamento rígido. Qualquer modificação na classe Motor pode exigir uma adaptação no código da classe Carro, dificultando a manutenção e extensibilidade.

  2. Exemplo de aplicação correta do Princípio da Inversão da Dependência:

     interface Motor {
         void ligar();
     }
        
     class MotorGasolina implements Motor {
         @Override
         public void ligar() {
             // Implementação específica para ligar motor a gasolina
         }
     }
        
     class Carro {
         private Motor motor;
        
         public Carro(Motor motor) {
             this.motor = motor;
         }
        
         public void ligarCarro() {
             motor.ligar();
         }
     }
    

    Nesse exemplo, aplicamos o Princípio da Inversão da Dependência, introduzindo a interface Motor como uma abstração. A classe Carro agora depende da interface Motor em vez de depender diretamente da classe MotorGasolina. Isso permite a fácil substituição do motor, caso seja necessário utilizar um motor elétrico ou a diesel, por exemplo, sem modificar o código da classe Carro.

Conclusão

O Princípio da Inversão da Dependência é uma diretriz importante para o desenvolvimento de software que visa criar um código mais flexível, extensível e de fácil manutenção. Ao adotar esse princípio, evitamos o acoplamento rígido entre módulos e facilitamos a substituição de dependências.

Ao implementar o Princípio da Inversão da Dependência em Java ou qualquer outra linguagem, é fundamental identificar as dependências diretamente acopladas e criar abstrações adequadas para elas. Utilizar interfaces ou classes abstratas pode ser uma solução eficaz para inverter as dependências. Dessa forma, garantimos um código mais modular, coeso e elegante, proporcionando maior adaptabilidade e reutilização do código.

Um grande abraço e até o próximo post!

Compartilhar: Twitter Facebook LinkedIn VK Reddit