Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Quais os 5 princípios que formam o acrônimo SOLID?

Alguém poderia me recordar a formação do acrônimo SOLID, fiquei com a impressão de não ter sido explicitado alguma das letras.

Eu fiz uma recapitulação e consegui estes:

S - SRP (Principio da Responsabilidade Única)

O - OCP (Princípio Aberto-Fechado)

L - LSP (Princípio da Substituição de Liskov)

I -

D - DIP (Princípio da inversão da dependência)

3 respostas

Oi Diego,

S - Single Responsibility Principle

O - Open Closed Principle

L - Liskov Substitution Principle

I - Interface Segregation Principle

D - Dependency Inversion Principle

Bons estudos!

Bom dia Rodrigo,

Obrigado pela presteza na resposta, acabei fuçanda na internet e havia encontrado esse Principio.

Contudo, permaneci sem me recordar se ele foi falado no curso.

Você poderia me explicar em poucas palavras o que seria o Interface Segregation Principle?

solução!

Oi Diego,

No 1º capítulo do curso tem um exercício que cita esse princípio, mas bem superficialmente.

A ideia do Interface Segregation Principle é você evitar ter interfaces "gordas" no seu projeto, ou seja, interfaces com muitos métodos que representam coisas distintas, pois isso vai obrigar todas as classes que implementarem essa interface a implementar todos os métodos, inclusive métodos que podem não fazer sentido para ela.

Exemplo:

public interface Autenticavel {

    void autenticarComSenha(String login, String senha);
    void autenticarComCartao(Cartao cartao);

}

public class Funcionario implements Autenticavel {

    public void autenticarComSenha(String login, String senha) {
        //logica de autenticacao com login/senha...
    }

    public void autenticarComCartao(Cartao cartao) {
        //funcionario nao autentica com cartao...
        throw new UnsupportedOperationException();
    }
}

public class Cliente implements Autenticavel {

    public void autenticarComSenha(String login, String senha) {
        //cliente nao autentica com login/senha...
        throw new UnsupportedOperationException();
    }

    public void autenticarComCartao(Cartao cartao) {
        //logica de autenticacao com cartao...
    }
}

Repare que nesse exemplo a interface define dois métodos, mas para cada classe apenas um deles faz sentido. Entretanto, as classes acabam sendo obrigadas a terem o outro método, que pode ou jogar uma exception, como fiz no exemplo, ou deixar o método vazio...

Isso é um exemplo de violação do princípio de Segregação de Interfaces.

Uma solução mais elegante, e que segue o princípio, poderia ser assim:

public interface AutenticavelComSenha {

    void autenticar(String login, String senha);

}

public interface AutenticavelComCartao {

    void autenticar(Cartao cartao);

}

public class Funcionario implements AutenticavelComSenha {

    public void autenticar(String login, String senha) {
        //logica de autenticacao com login/senha...
    }

}

public class Cliente implements AutenticavelComCartao {

    public void autenticar(Cartao cartao) {
        //logica de autenticacao com cartao...
    }
}

Repare que agora as interfaces estão "segregadas", e cada classe implementa apenas o que faz sentido.

Conseguiu entender melhor agora?

Bons estudos!