Não entendi muito bem qual foi o motivo de criação do método autentica(). Alguém poderia me explicar ?
Não entendi muito bem qual foi o motivo de criação do método autentica(). Alguém poderia me explicar ?
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;
É 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...".