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

Dúvida na classe SistemaInterno

public class SistemaInterno {

    private int senha = 2222;

    public void autentica(Autenticavel fa) {

        boolean autenticou = fa.autentica(senha);

        if(autenticou) {
            System.out.println("Pode entrar no sistema");
        } else {
            System.out.println("Não pode entrar no sistema");
        }
    }
}

Fiquei confuso nessa parte da criação do Sistema Interno, no caso temos o mesmo método autentica, tanto na classe SistemaInterno quanto na classe Gerente, Administrador, Cliente.

Mas não entendi o porque na classe SistemaInterno o método recebe um objeto como parâmetro e nas classes Gerente, Adm e Cliente elas recebem somente o atributo senha, sendo que na implementação do autentica no SistemaInterno recebemos um if para confirmar se autenticou ou não, mas o próprio método autentica já confirma se é true or false.

2 respostas
solução!

Olá Thales, tudo bem com você?

Na verdade o autentica do Sistema Interno não é o mesmo das classes Gerente, Administrador e Cliente, tem apenas o mesmo nome :)

Veja que essas últimas classes tiveram que implementar a interface Autenticavel que tem o método autentica que recebe como parâmetro um número inteiro, para verificar se a senha está correta, isso não acontece com o Sistema Interno :)

Mas não entendi o porque na classe SistemaInterno o método recebe um objeto como parâmetro

Então, estamos utilizando a interface Autenticavel como parâmetro do método para poder utilizar métodos que estão presentes nessa interface, dessa maneira temos que certeza que os objetos que passarmos por parâmetros tem essas funções definidas em suas classes

mas o próprio método autentica já confirma se é true or false.

É que precisamos enxergar o fluxo de uma seguinte maneira:

  • Só quem pode utilizar o Sistema Interno são objetos que assinam a interface Autenticavel
  • Além disso, esses objetos precisam ter a sua própria autenticação de senha

Vou mudar o nome do método autentica do Sistema Interno para que fique mais fácil, vamos supor que na verdade ele se chama: participarReuniao, a partir desse método precisamos que apenas funcionários participem então por isso eles precisam implementar Autenticável!

Mas além disso, esses funcionários precisam entrar com essa senha correta, então por isso dentro do método participar reunião eu preciso chamar o método autentica de cada objeto :)

É como se fosse 2 filtros, pode parecer um pouco confuso, mas o exemplo utilizado na aula é para apenas trazer esse conceito importante de que podemos utilizar interfaces como parâmetros de métodos e dado isso podemos utilizar todas as funções presentes nela :)

Compreendeu? Qualquer coisa estou a disposição :)

Abraços e Bons Estudos!

Ficou claro agora, muito obrigado!