Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
13
respostas

Método autentica().

Não entendi muito bem qual foi o motivo de criação do método autentica(). Alguém poderia me explicar ?

13 respostas

Oi Matheus, tudo beleza?

O método autentica() foi criado justamente para dar a capacidade de um determinado funcionário se autenticar no sistema ou não. Se ele for um funcionário que implementa a interface Autenticavel, ele terá condições de se logar no sistema.

Oi Daniel, boa tarde!

É que não consigo compreender o porquê um funcionário teria esse método, sendo que quem deveria fazer a autenticação é o sistema.

Pense no seguinte: um funcionário faz a autenticação porém o sistema valida a mesma.

Olhe o trecho de código abaixo.


class SistemaInterno {    

  void login(Autenticavel a) {
     int senha = // pega senha de um lugar, ou de um scanner de polegar
     boolean ok =    a.autentica(senha);

     // aqui eu posso chamar o autentica! 
     // não necessariamente é um Funcionario!
     // Mais ainda, eu não sei que objeto a 
     // referência "a" está apontando exatamente! Flexibilidade.
  }

}

O funcionário faz sua respectica autenticação e o sistema tem um boolean ok que vai receber true ou false dependendo da capacidade do funcionário se autenticar.

Se não tiver ficado claro pode falar que explico de outro jeito ;)

Psé, pra mim é como se o método autentica() fosse uma outra validação.

Veja bem. Na verdade não é uma segunda autenticação. O método vê a capacidade do funcionário se autenticar e depois retorna true caso a operação tenha sido um sucesso e false caso contrário. Dentro do sistema estamos apenas atribuindo o resultado dessa autenticação para uma variável para que possamos definir o rumo do programa.

Como tu simularia isso em uma tela de login ?

Pensando rápido poderia ser o seguinte.

O usuário preenche a matrícula dele e submete, caso seja um funcionário autenticável ele entraria com a senha dele em seguida. Caso os dados batessem, o método de autenticação permitiria que o usuário logasse.

Então é como se fosse uma daquelas verificações para saber se o usuário é administrador ou não. Exemplo:

private boolean isAdmin;

solução!

É por aí a ideia.

E não seria interessante em uma situação como essa ter uma classe DAO ?

Certamente. Mas aí estaremos pensando em um sistema mais complexo, enquanto esse atual é apenas para ensinar os conceitos e abstrações :)

Pois quando vi este método autentica, logo pensei: "Bom, isso deve fazer alguma consulta no banco de dados. Localizado a senha , comparando-a com a digitada, é retornado true ou false. Retornando isso ao método login, para que o usuário possa ser redirecionado para alguma janela de erro ou acesso ao sistema...".