Olá, Eduardo. Como vai?
Parabéns pela implementação! Você captou com precisão a essência do Encapsulamento. Mais do que apenas "esconder" dados, essa prática serve para proteger a integridade do objeto, garantindo que ele nunca entre em um estado inválido — como, por exemplo, ter um salário reduzido contra as regras de negócio.
Gostaria de destacar alguns pontos técnicos muito bem executados no seu código:
- Validação de Regra de Negócio: Ao colocar o
if(salario > novoValor) dentro do método ReajustarSalario, você transformou a classe em uma "guardiã" da informação. O mundo externo não consegue mais alterar o salário de forma direta e incorreta. - **Uso de
decimal**: Excelente escolha! Para valores monetários, o tipo decimal é muito mais indicado que double ou float em C#, pois evita aqueles erros de arredondamento que comentamos em outros tópicos. - Expression-bodied Member: O uso de
public decimal Salario => salario; para expor o valor apenas como leitura é uma sintaxe moderna e elegante do C#.
Para deixar seu código ainda mais alinhado com as boas práticas de desenvolvimento (especialmente em sistemas maiores), aqui vão duas pequenas sugestões:
- Lançamento de Exceções: Em vez de apenas usar um
Console.WriteLine para o erro, em aplicações reais costumamos usar throw new ArgumentException(...). Isso interrompe a execução e avisa o restante do sistema que algo deu errado, em vez de apenas imprimir uma mensagem que pode passar despercebida. - Formatação de Moeda: Você usou corretamente o
:C no WriteLine, o que é ótimo para a exibição!
Seu progresso na Orientação a Objetos está muito sólido. Continue praticando essa mentalidade de "o que a minha classe deve proteger?".
Espero que possa ter lhe ajudado!