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

Por que usar a classe Funcionario ao invés do nome da classe?

Por que deve usar:

Funcionario pedro = new Designer("833.222.048-39");
pedro.Nome = "Pedro";

Funcionario roberta = new Diretor("159.753.398-04");
roberta.Nome = "Roberta";

Funcionario igor = new Auxiliar("981.198.778-53");
igor.Nome = "Igor";

Funcionario camila = new GerenteDeConta("326.985.628-89");
camila.Nome = "Camila";

Ao invés de:

Designer pedro = new Designer("833.222.048-39");
pedro.Nome = "Pedro";

Diretor roberta = new Diretor("159.753.398-04");
roberta.Nome = "Roberta";

Auxiliar igor = new Auxiliar("981.198.778-53");
igor.Nome = "Igor";

GerenteDeConta camila = new GerenteDeConta("326.985.628-89");
camila.Nome = "Camila";

Na segunda opção acho mais fácil visualizar a criação do objeto.

2 respostas
solução!

Oi Rodrigo, tudo bem?

Você tem razão, é mais fácil visualizar o tipo de valor assmido por uma variável Diretor se ela foi declarada como Diretor´ em vez deFuncionario`.

Porém, o que o instrutor quis demonstrar é os benefícios do polimorfismo, do grego "poli + morphos" ("muitas formas"): Isso significa que uma mesma variável "Funcionario" possa assumir "muitas formas" diferentes:

Funcionario funcionario;

funcionario = new Designer("833.222.048-39");
funcionario.Nome = "Pedro";

GerarFolhaDePagamento(funcionario);

funcionario = new Diretor("159.753.398-04");
funcionario.Nome = "Roberta";

GerarFolhaDePagamento(funcionario);

funcionario = new Auxiliar("981.198.778-53");
funcionario.Nome = "Igor";

GerarFolhaDePagamento(funcionario);

funcionario = new GerenteDeConta("326.985.628-89");
funcionario.Nome = "Camila";

GerarFolhaDePagamento(funcionario);

Melhor ainda, você pode utilizar listas com o uso da classe abstrata Funcionario:

IList<Funcionario> funcionarios 
= new List<Funcionario> {
    new Designer("833.222.048-39") { Nome = "Pedro" },
    new Diretor("159.753.398-04") { Nome = "Roberta" },
    new Auxiliar("981.198.778-53") { Nome = "Igor" },
    new GerenteDeConta("326.985.628-89") { Nome = "Camila" }
};

GerarFolhaDePagamento(funcionarios);

Agora com esse exemplo que você mostrou entendi o motivo, obrigado.