3
respostas

Uso de composição, herança e interfaces

No exemplo criamos uma classe (AutenticacaoUtil) que implementa exatamente os métodos da interface (Autenticavel), porém a classe não implementa esta interface. Em vez disso, a classe é usada nas outras classes (ex.: Cliente, Administrador e Gerente) para evitar a duplicidade de código. Minha dúvida é:

Digamos que eu crie a classe Credenciais exatamente igual a AutenticacaoUtil, só que ela implementa Autenticavel. E então, ao invés das outras classes implementarem a interface Autenticavel eu teria apenas um atributo do tipo Credenciais nelas. Assim, não seria necessário ter o código que chama Credenciais dentro de cada classe. Ficaria ao estilo o código enviei. Essa abordagem é errada ou correta?

public class Credenciais implements Autenticavel {

    private int senha;

    public void setSenha(int senha) {
        this.senha = senha;
    }

    public boolean autentica(int senha) {
        if(this.senha == senha)
            return true;

        return false;
    }
}

public class Cliente{

    private Credenciais credenciais;

    public Cliente() {
        this.credenciais = new Credenciais();
    }

    public Credenciais getCredenciais() {
        return credenciais;
    }

    public void setCredenciais(Credenciais credenciais) {
        this.credenciais = credenciais;
    }
}

public class TesteSistema {

    public static void main(String[] args) {
        Cliente c = new Cliente();
        c.getCredenciais().setSenha(2222);

        SistemaInterno si = new SistemaInterno();
        si.autentica(c.getCredenciais());
    }

}
3 respostas

Fala, Victor!

Pode postar tuas classes AutenticacaoUtil.java e Autenticavel.java?

O AutenticacaoUtil eu renomeei para Credenciais. O Autenticavel é o que está abaixo:

public abstract interface Autenticavel {

    public void setSenha(int senha);

    public boolean autentica(int senha);

}

Alguém descobriu uma resposta?