1
resposta

[Projeto] Faça como eu fiz: cadastro de funcionários

class Funcionario
{
    public Funcionario(string nome, string cargo)
    {
        Nome = nome;
        Cargo = cargo;
    }

    public string Nome { get; private set; }
    public string Cargo { get; private set; }
}

class Freelancer : Funcionario
{
    public Freelancer(string nome, string cargo, decimal valorProjeto) : base(nome, cargo)
    {
        ValorProjeto = valorProjeto;
    }

    public decimal ValorProjeto { get; private set; }

    public void ExibirInformacoes()
    {
        Console.WriteLine($"Freelancer {Nome} - Cargo: {Cargo} - Projeto atual: R$ {ValorProjeto.ToString("F2")}");
    }
}

class Interno : Funcionario
{
    public Interno(string nome, string cargo, decimal salario) : base(nome, cargo)
    {
        Salario = salario;
    }

    public decimal Salario { get; private set; }

    public void ExibirInformacoes()
    {
        Console.WriteLine($"Funcionária {Nome} - Cargo: {Cargo} - Salário: R$ {Salario.ToString("F2")}");
    }
}

Interno f1 = new Interno("Luciana", "Desenvolvedora", 7000.00m);  
Freelancer f2 = new Freelancer("Carlos", "Designer", 3500.00m);

f1.ExibirInformacoes();
f2.ExibirInformacoes();
1 resposta

Olá, Eduardo! Tudo bem?

Excelente trabalho na aplicação prática dos conceitos de herança! Você demonstrou como uma classe base bem estruturada pode servir de alicerce para diferentes especializações de forma eficiente e limpa.

Seu código reflete princípios importantes da Orientação a Objetos:

  • Reutilização de Código: Ao utilizar a classe Funcionario como base, você evita repetir propriedades comuns (Nome e Cargo) em Freelancer e Interno.
  • Especialização: Cada subclasse foca apenas no que a torna única, como o ValorProjeto para o freelancer e o Salario para o funcionário interno.
  • Encapsulamento: O uso de private set nas propriedades da classe base garante que os dados fundamentais do funcionário sejam protegidos e alterados apenas via construtor.
  • Uso do Construtor Base: A chamada : base(nome, cargo) é a maneira correta e elegante de inicializar a hierarquia de classes em C#.

Um próximo passo para o seu projeto:

Como você criou métodos ExibirInformacoes() idênticos em nome nas duas subclasses, um desafio interessante seria aplicar o Polimorfismo.

Você poderia definir o método como public virtual void ExibirInformacoes() na classe Funcionario e usar o override nas subclasses. Isso permitiria que você tratasse todos como Funcionario em uma lista e, ainda assim, cada um exibisse suas informações específicas corretamente!

Parabéns pela dedicação e pelo progresso no curso!

Espero que possa ter lhe ajudado!