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

Duvida em Herança / Composição

Olá muito boa noite!

Eu estou com a seguinte dúvida... Na aula de número 07 o primeiro vídeo " Revendo composição" Nico trata de explicar a delegação em recursos que serão manuseados. A questão é a seguinte...

Ele cria uma nova classe "AutenticacaoUtil" e nesta ele cria metodos que serão chamados quando o objeto referente a mesma for criado....

Sendo assim...qual o motivo dele criar a interface "Autenticavel" sendo que esta esta somente sendo implementada pelas classes "Cliente" ,"Gerente" e "Administrador" , porem quem determina as regras de negocio e quem esta sendo delegada a cumprir os metodos é justamente a classe "AutenticacaoUtil" ?

Não entendi o motivo de criar mais um classe , mais metodos sendo que estes não estão sendo utilizados, já que quem esta cumprindo não é a interface e sim a classe "UtilizacaoUtil"...

Qual o motivo da interface então? Sendo que esta somente esta sendo implementada mas nao esta sendo "chamada", pois quem esta determinando os metodos a serem utilizados sao os metodos da classe "UtilizacaoUtil"?

Desde já eu agradeço muito atenção!

2 respostas
solução!

Oi Francesco, tudo bem?

Nesse caso, tanto a classe AutenticacaoUtil, como a interface Autenticavel, são importantes na hora de implementar as regras de negócio. Enquanto Autenticavel faz o papel de contrato, trazendo a vantagem do polimorfismo e mostrando às classes que a implementam, quais são os métodos que devem ser implementados, AutenticacaoUtil resolve o problema da repetição de código através da composição.

Caso não tivéssemos a interface Autenticavel sendo implementada, nada garantiria que as classes Cliente, Gerente e Administrador estariam, de fato, obedecendo/implementando as regras de negócio. O outro ponto onde essa interface é útil seria justamente o que motivou o Nico a introduzir o assunto:

Imgur

Temos um SistemaInterno com um método que só deve receber classes autenticáveis, ou seja, apenas aquelas que implementam Autenticavel:

public class SistemaInterno {

    // Código omitido

    public void autentica(Autenticavel fa){

        // Código omitido
    }
}

E através do polimorfismo que Autenticavel oferece, podemos fazer isso sem problemas.

Voltando um pouco para o AutenticacaoUtil, o principal motivo para essa classe existir é a reescrita de código, não queremos implementar exatamente o mesmo código em cada classe que for Autenticavel. Queremos centralizar o código em um único lugar para facilitar a manutenção, então caso algum detalhe na regra implementada mude, só precisamos mudar aqui em AutenticacaoUtil. Mas como eu mencionei antes, se não tivermos a interface Autenticavel, nada garante que essas regras serão implementadas no código.

Portanto você acertou em dizer que quem determina a forma como as regras são implementadas é a classe AutenticacaoUtil, mas quem de fato determina os métodos a serem utilizados é a interface Autenticavel.

Espero ter ajudado, se ficou qualquer dúvida é só avisar!

Bons estudos!!

Agradeço muito a resposta e solução! Vou rever a aula analisar os pontos que você me descreveu. Agradeço muito sua atenção!