Olá pessoal, em relação à interface eu fiquei com alguns questionamentos, vamos lá:
Desdo o começo o professou bateu na tecla de evitar repetir código por ficar mais difícil de fazer manutenção futuramente.
Nós temos as classes Gerente e Administrador que precisam de métodos de senha e autentica para acessarem um determinado sistema.
O gerente já possuía esses métodos, portanto para evitar ficar copiando código para o Administrador(assim como para tantos outros que pudessem vir a existir), criamos um outra classe FuncionarioAutenticavel com os métodos de senha e autentica.
FuncionarioAutenticavel herda Funcionário e por sua vez, Gerente e Administrador herdam FuncionarioAutenticavel. Dessa forma Gerente e Administrador está herdando os metodos de senha e autentica.
Aparentemente problema resolvido. Criamos uma 'subclasse' de funcionários que possuem métodos de senha, e que são Funcionarios também. Qualquer novo tipo de funcionário que precise de senha e que venha a existir é só fazer ele herdar o FuncionarioAutenticavel.
Agora um outro problema é que preciso que algum cliente também possua acesso ao sistema, ou seja, ele precisa ter os métodos de senha e autentica.Mas não posso faze-lo herdar FuncionarioAutenticavel, pois ele não é funcionário.
Então foi criado a interface Autenticavel com metodos abstratos. Agora Cliente, Gerente e Administrador 'assinam' esse contrato e precisam implementar cada um os metodos de senha e autentica.
Minha pergunta é: eu não poderia simplesmente copiar e colar os métodos de senha e autentica do Gerente para o Cliente e Administrador sem criar a interface? Eu sei que criando a interface parece que ganhamos em termos de deixar o código mais conciso, pois eu obrigo aquela classe a implementar tais métodos, que se caso não houvesse a interface alguma classe que precisa de senha iria ficar perdida.
Ma em termos de repitir código parece que não ganhamos tanto assim, pois como cada uma das classes vai ter que implementar os métodos, se por exemplo em quiser mudar a regra de setar a senha(tantos digitos p. ex) eu vou ter que faze essa alteração dentro de cada uma das classes que 'assinaram o contrato'.
É isso mesmo?