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

Duplicação de código com a interface.

O professor nico disse no Primeiro vídeo da aula 06 que duplicar código não é uma boa ideia, por isso criamos a classe abstrata intermediária, porém no quarto vídeo ao criarmos a interface temos que implementar e portanto reescrever novamente os métodos da interface em todas as classes que utilizam, repetindo ainda mais os códigos.

Gostaria de saber se existe alguma forma de contornar isto.

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora
4 respostas

Boa noite Renan!

Realmente duplicar código não é uma boa prática, mas, nesse caso específico que você citou, não tem outro jeito.

Administrador e Gerente são Funcionarios, e sao Autenticaveis; Cliente não é Funcionario, mas é Autenticavel.

Se você criar uma Classe Autenticavel, ao invés de uma Interface, não vai ser possível prosseguir, pois as Classes Administrador e Gerente já herdam de Funcionario,e não podem herdar de outra classe, diretamente. Portanto, a única solução é utilizar a Interface Autenticavel e duplicar o código. Só não vai ter código duplicado se a implementação de autenticação for diferente para as 3 Classes (Administrador, Gerente e Cliente); aí você vai ter um método diferente para cada Classe, mas ele precisa existir (pois a Classe assinou o contrato da Interface) e precisa ter a mesma assinatura (mesmo nome e mesmos parâmetros).

solução!

Java não permite herança múltipla(herdar de mais de uma classe), e no modelo proposto pelo exercício já temos herança de Gerente , Adminstrador para Funcionario. Que por sinal é um uso que faz sentido , porque temos a relação " é um" das classes filhas para a classe pai (Gerente e Adminstrador "é um" Funcionario)

Vamos supor que os métodos setSenha e autentica foram definidos na classe abstrata Funcionario . E que agora o sistema modele uma classe para visitantes que possam frequentar a empresa(classe VISITANTE) e que eles precisam ser autenticados.

Muito fácil que o visitante seja autenticado , basta que essa classe herde de Funcionario , e o código será reaproveitado(ou sobrescrito), mas acabamos de criar outro problema VISITANTE é um FUNCIONARIO?

NÃO! eles apenas necessitam de COMPORTAMENTOS para autenticação, por isso foi criado a interface AUTENTICAVEL, para que toda classe que precise ser autenticável possar ser implementando a interface.

Mas se a lógica de autenticação se repetir muito, você pode encapsular em uma classe , e sair reaproveitando.

Esses cursos abordam esse assunto de design de código e podem te dar uma maior compreensão sobre essas questẽos.

https://cursos.alura.com.br/course/orientacao-objetos-java

https://cursos.alura.com.br/course/orientacao-a-objetos-avancada-e-principios-solid

Agora consegui entender melhor esta questão, muito obrigado, pessoal!

Por nada Renan! É sempre bom poder ajudar!