Olá desenvolvedores, por que interface e polimorfismo extremo? Porque é uma forma de permitir única e exclusivamente acesso a quem tiver permissão, ou seja, a quem tiver a chave autêntica. Que nada mais é do que o contrato em todos os seus detalhes.
E tudo começa com a criação de um método separado de autenticação. Método este que receberá todos que implementam a permissão de acesso. E é isso que nos permitirá conceder essa permissão para outros “tipos de Pessoas”, além do secretário.
Recordando, sabemos que o polimorfismo ocorre quando duas ou mais classes derivadas de uma mesma superclasse, podem invocar métodos que tem a mesma assinatura. Entretanto, apresentam comportamentos distintos para cada classe derivada.
IMPLEMENTANDO O POLIMORFISMO EXTREMO
Esta implementação significa travar o contrato para autorizar somente quem tiver o contrato legitimado. E isso significa a criação da classe que receberá todos que implementam o PermitirAcesso.
Crie um pacote e seguindo o padrão que estabelecemos desde o início. Clique com o botão direito do mouse sobre a pasta src >> new >> package. Dê ao pacote o nome de “cursoJava.ClassesAuxiliares”.
Agora, dentro do pacote cursoJava.ClassesAuxiliares, crie uma nova classe, Src >> new >> class. Dê a ela o nome de “FuncaoAutenticacao”. Esta nova classe tem a função de somente receber quem tem o contrato da interface PermitirAcesso e chamar o método Autenticar().
Assim estamos utilizando o polimorfismo, estabelecendo um método em uma função que recebe todos que tem o contrato. Um padrão muito utilizado no Java.
Agora é hora de implementar o método ou a função. O método terá visibilidade pública, e retornará um boolean. Daremos ao método o nome de autenticarCursoJava, e ele receberá como parâmetro a interface PermitirAcesso cuja variável chamaremos de acesso. Este método irá retornar a variável acesso chamando o autenticar().
No método principal, inicie a FuncaoAutenticacao, cuja variável autenticação é igual ao new FuncaoAutenticacao().
FuncaoAutenticacao autenticacao = newFuncaoAutenticacao();
Iniciamos um objeto “autenticação”, e na sequência temos a criação da interface onde passamos para o objeto secretário login e senha. E a partir daí poderemos chamar o objeto “autenticação” diretamente no escopo da condição da if. Ele invocará a função autenticarCursoJava que como parâmetro receberá o permitirAcesso.
O autenticarCursoJava entra na implementação que retorna uma variável que invoca o método autenticar() do secretário e então irá validar. E é possível amarrar ainda mais.
O primeiro passo é definir o objeto permitirAcesso dentro de FuncaoAutenticacao. Assim poderemos criar um método FuncaoAutenticacao que obrigatoriamente receberá como parâmetro o “PermitirAcesso acesso”. Este método em seu escopo fará referência ao objeto e receberá a variável “acesso”.
REESTRUTURAÇÃO DO CÓDIGO
As recentes mudanças refletirão em algumas alterações no código. Assim, é importante que esteja ainda mais atento a partir desse momento. Nesse instante, para que na classe main seja possível receber a FuncaoAutenticacao() …
… será necessário fazer nova modificação no escopo da condição da estrutura de seleção if, chamando a FuncaoAutenticacao e passando como parâmetro o permitirAcesso.
Dessa forma precisamos também reescrever o método autenticarCursoJava(), deixando-o apenas como o autenticar – método que já havíamos implementado. Porém agora, e no retorno será chamado o que foi recebido no construtor. Veja o código reescrito na imagem abaixo.
E agora a linha de código abaixo não será mais necessária. Veja na imagem como fica a declaração de condição do if.
FuncaoAutenticacao autenticacao = new FuncaoAutenticacao();
EM POUCAS PALAVRAS
Iniciamos então o objeto permitirAcesso da interface PermitirAcesso que é do tipo Secretario(), e que recebe como parâmetro login e senha.
E posteriormente iniciamos uma nova FuncaoAutenticacao passando o objeto permitirAcesso. A FuncaoAutenticacao vai passar a interface que já é do tipo secretario e atribuir ao objeto, porque precisaremos chamar o método autenticar.
Mas ainda podemos diminuir nosso código instanciando o objeto dentro do if. Veja como fica agora.
if(new FuncaoAutenticacao(new Secretario(login, senha)).autenticar()){
//Bloco de instruções
}
Dessa forma a linha de código abaixo também não será mais necessária, podendo então ser deletada.
PermitirAcesso permitirAcesso = new Secretario(login, senha);
~\\~
E para que diretor possa ter acesso, antes ele precisa ter os mesmos atributos e métodos de autenticação da classe Secretario. Bem como o método construtor que receberá como parâmetro o login e a senha, e um construtor padrão, sem parâmetros. E por fim ele deverá implementar a interface por meio da palavra reservada implements.
Na estrutura do if no método principal no lugar de secretário informe Diretor. E caso queira defina uma senha diferente para o diretor.
if(new FuncaoAutenticacao(new Diretor(login, senha)).autenticar()){
//bloco de instruções
}
Para saber mais e ter acesso aos códigos dessa série acesse o GitHub JDev Treinamento.