1
resposta

Faça como eu fiz: relatório de funcionários

Para esse tipo de situação, era possível a implementação de um método virtual genérico ou apenas a assinatura do método em uma classe abstrata que pudesse ser sobrescrita. Para ambos os casos, nesse problema específico, a resposta seria a mesma.

Program.cs

using RH.Modelos;

Funcionario f1 = new Gerente("Organização estrutural das tarefas da equipe.");
Funcionario f2 = new Desenvolvedor("Criação da interface do site.");

Console.Clear();
Console.WriteLine(f1.GerarRelatorio());
Console.WriteLine(f2.GerarRelatorio());

Funcionario.cs

namespace RH.Modelos;
abstract class Funcionario {
    public abstract string GerarRelatorio();
}

ou

Funcionario.cs

namespace RH.Modelos;
class Funcionario {
    public virtual string GerarRelatorio() {
        return "relatorio genérico";
    }
}

Gerente.cs

namespace RH.Modelos;
class Gerente : Funcionario {

    public string? relatorio {get;}

    public Gerente(string? relatorio) {
        this.relatorio = relatorio;
    }

    public override string GerarRelatorio() {
        return $"Relatório do Gerente: {relatorio}";
    }
}

Desenvolvedor.cs

namespace RH.Modelos;
class Desenvolvedor : Funcionario {

    public string? relatorio {get;}

    public Desenvolvedor(string? relatorio) {
        this.relatorio = relatorio;
    }

    public override string GerarRelatorio() {
        return $"Relatório do Dev: {relatorio}";
    }
}
1 resposta

Oi, Diego! Como vai?

Gostei da sua análise ao comparar o uso de método abstrato com o método virtual, mostrando que ambos resolvem o problema neste cenário. Isso demonstra uma boa compreensão de polimorfismo e das possibilidades de design em orientação a objetos.

Continue explorando essas decisões de modelagem, pois elas fazem diferença na clareza e manutenção do código.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!