Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
1
resposta

[Projeto] Faça como eu fiz: encapsulando reajuste de salário

Classe Program:

Funcionario f = new("Fernanda Lima", 4000);
f.ReajustarSalario(3500); 
f.ReajustarSalario(4200); 

Classe Funcionario:

namespace Encapsulamento;

internal class Funcionario(string nome, double salarioInicial)
{
    public string Nome { get; private set; } = nome;
    private double salario = salarioInicial;

    public void ReajustarSalario(double novoValor)
    {
        if (novoValor > salario)
        {
            salario = novoValor;
            
            Console.WriteLine($"Funcionário: {Nome}");
            Console.WriteLine($"Salário atual: R$ {Salario:N2}");
        }
        else
        {
            Console.WriteLine("Erro: O novo salário deve ser maior que o atual.");
        }
    }

    public double Salario
    { 
        get { 
            return salario; 
        } 
    }
}

Referente a classe Funcionario eu tenho uma duvida, por que utilizamos um campo privado salario? se só utilizássemos a propriedade Salario não estaria correto?
Fiquei com essa duvida pois estou com um sentimento de que existe uma redundância nesse momento.

1 resposta
solução!

Olá, Fabiano! Como vai?

Sua observação é muito interessante. Nesse exemplo, realmente poderíamos utilizar uma propriedade autoimplementada como public double Salario { get; private set; } e o código continuaria correto.

O uso do campo privado salario serve para demonstrar de forma mais explícita o conceito de encapsulamento, separando o armazenamento interno dos dados da forma como eles são expostos. Isso também oferece mais flexibilidade caso futuramente seja necessário adicionar validações ou cálculos internos sem alterar a interface pública da classe.

Uma dica interessante para o futuro é utilizar propriedades autoimplementadas quando não houver necessidade de lógica adicional no armazenamento dos dados. Veja este exemplo:


public double Salario { get; private set; }

public void ReajustarSalario(double novoValor)
{
    if (novoValor > Salario)
    {
        Salario = novoValor;
    }
}

Nesse caso, a propriedade armazena o valor internamente de forma automática, deixando o código mais enxuto e mantendo o encapsulamento.

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