1
resposta

Exercício de reescrita utilizando composição

Interface "Autenticavel":

public abstract interface Autenticavel{

    public boolean autentica(int senha);
    public void setSenha(int senha);

}

Classe "AutenticacaoUtil": Ignora o atributo "login", fiz para testar algumas coisas.

public class Autenticador{

    private String login;
    private int senha;

    public boolean autentica(int senha){
        if(this.senha == senha){
            return true;
        }
        return false;
    }
    public void setLogin(String login){
        this.login = login;
    }
    public void setSenha(int senha){
        this.senha = senha;
    }

Classe Cliente:

public class Cliente implements Autenticavel{

    private Autenticador autenticador;

    public Cliente(String login, int senha){
        this.autenticador = new Autenticador();
        this.autenticador.setLogin(login);
        this.autenticador.setSenha(senha);
    }
    @Override
    public boolean autentica(int senha){
        return autenticador.autentica(senha);
    }
    @Override
    public void setSenha(int senha){
        autenticador.setSenha(senha);
    }

Classe Gerente:

public class Gerente extends Funcionario implements Autenticavel{

    private Autenticador autenticador; 

    public Gerente(String nome, String cpf, double salario, String login, int senha) {
        super(nome, cpf, salario);
        this.autenticador = new Autenticador();
        this.autenticador.setSenha(senha);
        this.autenticador.setLogin(login);
    }
    @Override
    public double getBonificacao(){
        return super.getSalario();
    }
    @Override
    public boolean autentica(int senha){
        return autenticador.autentica(senha);
    }
    @Override
    public void setSenha(int senha){
        autenticador.setSenha(senha);
    }

Classe Administrador:

public class Administrador extends Funcionario implements Autenticavel{

    private Autenticador autenticador;

    public Administrador(String nome, String cpf, double salario, String login, int senha) {
        super(nome, cpf, salario);
        this.autenticador = new Autenticador();
        this.autenticador.setSenha(senha);
        this.autenticador.setLogin(login);
    }
    @Override
    public double getBonificacao(){
        // TODO Auto-generated method stub
        return 0;
    }
    @Override
    public boolean autentica(int senha){
        return this.autenticador.autentica(senha);
    }
    @Override
    public void setSenha(int senha){
        this.autenticador.setSenha(senha);
    }

Classe Sistema interno:

public class SistemaInterno{

    private int senha = 2222;

    public boolean autentica(Autenticavel attcavel){
        System.out.println(attcavel.autentica(this.senha));
        return attcavel.autentica(this.senha);
    }

Classe de testes:

public class Testes{

    public static void main(String[] args){

        Gerente g1 = new Gerente("Jerônimo", "222.222.222.22", 5000.0, "je", 2222);
        Administrador adm1 = new Administrador("João", "444.444.444.44", 5000.0, "jão", 2222);
        Cliente cl1 = new Cliente("maria", 4444);

        SistemaInterno si = new SistemaInterno();

        si.autentica(g1);
        si.autentica(adm1);
        si.autentica(cl1);

Classe mãe "Funcionario":

public abstract class Funcionario{

    private String nome;
    private String cpf;
    private double salario;

    public Funcionario(String nome, String cpf, double salario){
        this.nome = nome;
        this.cpf = cpf;
        this.salario = salario;
//        puxarFichaFuncionario();
    }
    public void puxarFichaFuncionario(){
        System.out.println("Ficha de funcionário de " + getNome());
        System.out.println("cpf: " + getCpf());
        System.out.println("salário atual: " + getSalario());
    }
    public abstract double getBonificacao();     
    public String getNome(){
        return this.nome;
    }
    public double getSalario(){
        return this.salario;
    }
    public String getCpf(){
        return this.cpf;
    }
}
1 resposta

Muito bom Jerônimo, espero que esteja gostando do curso! Bons estudos