1
resposta

[Projeto] Faça como eu fiz: determinando a situação de um estudante com base na média

class Estudante
{
    public Estudante(string nome)
    {
        Nome = nome;
    }

    public string Nome { get; private set; }
    public decimal Nota1 { get; set; }
    public decimal Nota2 { get; set; }

    public decimal Media => ( Nota1 + Nota2 ) / 2;

    public string Situacao => Media > 6 ? "Aprovado" : "Reprovado";
}

Estudante estudante = new Estudante("Lucas Rocha");
estudante.Nota1 = 7.5m;
estudante.Nota2 = 5.0m;

Console.WriteLine("Estudante: " + estudante.Nome);
Console.WriteLine("Média: " + estudante.Media.ToString("F2"));
Console.WriteLine("Situação: " + estudante.Situacao);
1 resposta

Olá, Eduardo. Como vai?

Parabéns por mais essa entrega! É impressionante ver como você está consolidando os conceitos de Propriedades Somente Leitura e Membros com Corpo de Expressão (=>).

O seu código está extremamente elegante. Ao utilizar a sintaxe => para a Media e a Situacao, você criou o que chamamos de Propriedades Calculadas. Isso é excelente porque garante que esses valores nunca fiquem "desatualizados": toda vez que alguém consultar a Media, o C# fará o cálculo com base nos valores atuais de Nota1 e Nota2.

Gostaria de destacar os pontos mais fortes da sua implementação:

  • **Uso de decimal**: Mais uma vez, uma escolha técnica muito precisa. O tipo decimal evita imprecisões matemáticas comuns em tipos de ponto flutuante, o que é ideal para notas escolares.
  • Encapsulamento do Nome: Ao usar private set no Nome, você mantém a integridade da identificação do estudante, permitindo que ele seja definido apenas no momento da criação (via construtor).
  • Operador Ternário: A lógica da Situacao ficou muito limpa. O uso do ternário (? :) para definir entre "Aprovado" ou "Reprovado" é a forma mais idiomática de resolver esse tipo de condição simples em C#.

Para complementar seu projeto, deixo uma reflexão sobre a Consistência dos Dados:

Atualmente, o C# permite que qualquer um atribua uma nota inválida, como Nota1 = 150 ou Nota2 = -5. Se você quiser levar o encapsulamento ao limite, poderia transformar as propriedades das notas em propriedades com lógica de validação:

private decimal nota1;
public decimal Nota1 
{ 
    get => nota1; 
    set => nota1 = (value >= 0 && value <= 10) ? value : 0; 
}

Dessa forma, sua classe Estudante se tornaria "blindada" contra entradas de dados incoerentes.

Você está demonstrando uma facilidade incrível para traduzir regras de negócio em código limpo e moderno. Continue com esse excelente padrão de estudos!

Espero que possa ter lhe ajudado!