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

Interface e o parâmetro "funcionário" dentro do método Logar da classe Sistema Interno

Em geral as aulas do Alura são muito boas mas essa aula de interface está um pouco complicada. Essa técnica de mostrar o que não deve ser feito para depois mostrar como deve ser feito atrapalhou um pouco.

Minha maior dúvida foi dentro de Sistema Interno, essa classe possui um método (Logar) com parâmetro para uma Interface (IAutenticavel funcionário). Porém o Programa.cs manda o objeto Diretor (roberta) inteiro como argumento para o parâmetro desse método.

  1. Isso significa que Sistema Interno descarta todo os outros elementos do objeto Diretor Roberta ficando apenas com a parte do objeto delimitada pela interface? (Isso pode, Arnaldo????)

  2. Se não, se a interface não implementa nenhum método e o método Logar da classe Sistema Interno está recebendo somente a interface do objeto, em que momento o computador vai saber que a lógica:

         return Senha == senha;

foi implementada dentro do método Autenticar da classe abstrata FuncionárioAutenticável?

4 respostas
solução!

Olá Fernando!

O que acontece é que temos várias heranças ocorrendo. Uma classe pode ter apenas uma classe mãe, mas pode implementar várias interfaces.

A interface diz o que deve ser implementado dentro de uma classe, mas não altera os outros dados da classe base. A classe Diretor herda de FuncionarioAutenticavel, que por sua vez, herda de Funcionario e implementa a interface IAutenticavel. Ou seja, Diretor é um Funcionario mas também é IAutenticavel quando for necessário se logar no sistema.

Com isso, Diretor e GerenteDeConta conseguem acessar o sistema, pois o FuncionarioAutenticavel já tem o método Autenticar. Depois, ParceiroComercial já tem sua própria implementação de IAutenticavel.

E para executar o método Logar na classe SistemaInterno, precisa de "alguém" que implemente a interface IAutenticavel. E é essa a vantagem da interface. Qualquer classe que seja IAutenticavel terá o que é necessário para usar o método Logar.

Espero que tenha te ajudado a compreender!

Bons estudos!

Se entendi bem, então um objeto pode ser passado como argumento não somente pela classe que o implementa senão também pela sua classe base e suas interfaces. A interface no parâmetro de Sistema Interno atuaria nesse caso mais como um "filtro". É isso?

Isso mesmo! Essa é uma grande vantagem da OO. Dependendo do tipo que é pedido como argumento, mudam completamente as possibilidades do seu projeto.

Caso o parâmetro de uma função seja uma interface, qualquer classe que implementar esta interface poderá ser passada como parâmetro.

Mais pra frente você verá o poder das interfaces, quando chegar na parte web do .NET verá como é útil ter/usar interfaces no seu projeto ou mesmo o uso interfaces de coleções.

Show, muito obrigado pela ajuda Fabiano! Abraços!