Você sabe o que é SOLID❓
Tags: java, beginners, codereview, algorithms
Published: 2024-03-11 02:32:28

Não tenha medo, **S.O.L.I.D** é um acrônimo que representa cinco princípios de design de software orientado a objetos. Cada letra corresponde a um princípio específico. Aqui está uma breve descrição de cada um, juntamente com um exemplo de código em Java:

➡️ **S - Single Responsibility Principle (Princípio da Responsabilidade Única)**:

Descrição: Uma classe deve ter apenas um motivo para mudar, ou seja, ela deve ter apenas uma responsabilidade.

```Java
class Calculadora {
    public int soma(int a, int b) {
        return a + b;
    }
}
```


➡️ **O - Open/Closed Principle (Princípio Aberto/Fechado)**:

Descrição: Uma classe deve estar aberta para extensão, mas fechada para modificação. Isso significa que você pode adicionar novas funcionalidades sem alterar o código existente.

```Java
interface Forma {
    double calcularArea();
}

class Quadrado implements Forma {
    public double calcularArea() {
        // lógica de cálculo de área para quadrado
    }
}

class Circulo implements Forma {
    public double calcularArea() {
        // lógica de cálculo de área para círculo
    }
}

```


➡️ **L - Liskov Substitution Principle (Princípio da Substituição de Liskov)**:

Descrição: Subtipos devem ser substituíveis por seus tipos base sem alterar a corretude do programa.

```Java
class Retangulo {
    protected int largura;
    protected int altura;

    public void setLargura(int largura) {
        this.largura = largura;
    }

    public void setAltura(int altura) {
        this.altura = altura;
    }
}

class Quadrado extends Retangulo {
    public void setLargura(int lado) {
        this.largura = lado;
        this.altura = lado;
    }

    public void setAltura(int lado) {
        this.largura = lado;
        this.altura = lado;
    }
}

```


➡️ **I - Interface Segregation Principle (Princípio da Segregação de Interfaces)**:

Descrição: Uma classe não deve ser forçada a implementar interfaces que ela não utiliza. Interfaces devem ser específicas para os clientes que as utilizam.

```Java
interface Trabalhador {
    void trabalhar();
    void descansar();
}

class Programador implements Trabalhador {
    public void trabalhar() {
        // lógica específica para programador
    }

    public void descansar() {
        // lógica específica para programador
    }
}

class Gerente implements Trabalhador {
    public void trabalhar() {
        // lógica específica para gerente
    }

    public void descansar() {
        // lógica específica para gerente
    }
}

```


➡️ **D - Dependency Inversion Principle (Princípio da Inversão de Dependência)**:

Descrição: Módulos de alto nível não devem depender de módulos de baixo nível. Ambos devem depender de abstrações. Além disso, abstrações não devem depender de detalhes, mas detalhes devem depender de abstrações.

```Java
class Motor {
    public void ligar() {
        // lógica para ligar o motor
    }
}

interface Veiculo {
    void acelerar();
}

class Carro implements Veiculo {
    private Motor motor;

    public Carro(Motor motor) {
        this.motor = motor;
    }

    public void acelerar() {
        motor.ligar();
        // lógica específica para acelerar o carro
    }
}

```


Em conclusão, compreender e aplicar os princípios SOLID é crucial para desenvolver software robusto e flexível. Estes princípios fornecem uma base sólida para a construção de sistemas escaláveis, de fácil manutenção e extensíveis. 📚Ao continuar estudando e praticando esses conceitos, você estará investindo no aprimoramento das suas habilidades de design de software. Lembre-se de que a busca constante pelo conhecimento é essencial no campo do desenvolvimento de software, pois as tecnologias evoluem e novos desafios surgem. Continue explorando, participando de comunidades e projetos, e desafiando-se a aplicar esses princípios em seus próprios códigos. O compromisso com a excelência no design de software contribuirá significativamente para o seu desenvolvimento profissional. Continue estudando e progredindo!🚀