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.