1
resposta

[Projeto] Faça como eu fiz: validação de nota mínima

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

    public string Nome { get; private set; }
}

class Avaliacao
{
    public Avaliacao(string nome)
    {
        Aluno = new Aluno(nome);
    }
    public Aluno Aluno { get; private set; }
    private double nota;

    public double Nota { get => nota; }

    public void AtribuirNota(double nota)
    {
        if( nota >= 0 && nota <= 10)
        {
            this.nota = nota;
            Console.WriteLine($"Aluno: {Aluno.Nome}");
            Console.WriteLine($"Nota atribuída: {nota}");
        }
        else
        {
            Console.WriteLine("Erro: A nota deve estar entre 0 e 10.");
        }
    }
}

Avaliacao avaliacao = new Avaliacao("Carla Silva");
avaliacao.AtribuirNota(11);   // inválido
avaliacao.AtribuirNota(8.5);  // válido
1 resposta

Olá, Eduardo! Tudo bem?

Excelente projeto! Você aplicou exatamente o que conversamos no desafio anterior: o uso do encapsulamento para garantir a integridade dos dados através de regras de validação.

Ao restringir o valor da nota entre 0 e 10, você impede que o objeto Avaliacao entre em um "estado inválido" (como um aluno com nota 11 ou -1), o que é um dos pilares fundamentais da Orientação a Objetos profissional.

Destaques técnicos da sua implementação:

  • Validação de Domínio: O uso do if( nota >= 0 && nota <= 10) dentro do método AtribuirNota é a forma correta de proteger o campo privado nota. Isso garante que as regras de negócio sejam respeitadas.
  • Composição de Objetos: É muito interessante ver que a classe Avaliacao possui um Aluno. Isso mostra que você já está confortável em transitar entre os conceitos de associação de classes enquanto aplica o encapsulamento.
  • Propriedade Somente Leitura: Manter public double Nota { get => nota; } é perfeito, pois permite que o sistema consulte a nota sem o risco de alterá-la por fora do método de validação.
  • Feedback ao Usuário: Adicionar o Console.WriteLine tanto para o sucesso quanto para o erro torna o código muito mais didático e fácil de depurar.

Uma dica sobre as propriedades do C#:

Como você está estudando Getters e Setters, sabia que o C# permite fazer essa validação diretamente na propriedade? Veja como ficaria:

public double Nota
{
    get => nota;
    set
    {
        if (value >= 0 && value <= 10)
            nota = value;
        else
            Console.WriteLine("Erro: Nota inválida.");
    }
}

Dessa forma, você poderia usar avaliacao.Nota = 8.5; e a validação aconteceria automaticamente no set. O uso de métodos (como o seu AtribuirNota) também é muito comum, especialmente quando a ação envolve mais de um passo ou gera logs.

Parabéns pela consistência! Seus 91 posts são um testemunho da sua dedicação em dominar o C#.

Espero que possa ter lhe ajudado!