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: sistema de reservas em hotel

Classe Program:

Hospede hospede = new("Juliana Moura");
Quarto quarto = new(101);
quarto.ValorDiaria = 250;

Reserva reserva = new(hospede, quarto, 3);
reserva.MostrarDados();

Classe Hospede:

namespace Encapsulamento;

internal class Hospede(string nome)
{
    public string Nome { get; private set; } = nome;
}

Classe Quarto:

namespace Encapsulamento;

internal class Quarto(int numero)
{
    private decimal valorDiaria;

    public int Numero { get; private set; } = numero;
    public decimal ValorDiaria
    {
        get { return valorDiaria; }
        set
        {
            if (value > 0)
            {
                valorDiaria = value;
            }
            else
            {
                Console.WriteLine("Erro: O valor da diária deve ser maior que zero.");
            }
        }
    }
}

Classe Reserva:

namespace Encapsulamento;

internal class Reserva(Hospede hospede, Quarto quarto, int diarias)
{
    private int diarias = SetDiarias(diarias);

    public Hospede Hospede { get; private set; } = hospede;
    public Quarto Quarto { get; private set; } = quarto;
    public decimal ValorTotal
    {
        get
        {
            return Quarto.ValorDiaria * diarias;
        }
    }

    private static int SetDiarias(int diarias)
    {
        if (diarias <= 0)
        {
            throw new ArgumentException("O número de diárias deve ser maior que zero.");
        }

        return diarias;
    }

    public void MostrarDados()
    {
        Console.WriteLine($"Reserva para: {Hospede.Nome}");
        Console.WriteLine($"Quarto: {Quarto.Numero}");
        Console.WriteLine($"Valor total: R$ {ValorTotal:N2}");
    }
}
1 resposta
solução!

Olá, Fabiano! Como vai?

Gostei da forma como você aplicou os conceitos de encapsulamento, utilizando private set nas propriedades e criando validações tanto para ValorDiaria quanto para a quantidade de diárias. Também foi uma boa escolha calcular o valor total por meio de uma propriedade somente leitura, mantendo a lógica centralizada na classe Reserva.

Uma dica interessante para o futuro é utilizar propriedades com validação diretamente no set, quando fizer sentido para a regra de negócio. Veja este exemplo:

<pre><code>
private int quantidade;

public int Quantidade
{
    get => quantidade;
    set
    {
        if (value > 0)
        {
            quantidade = value;
        }
    }
}
</code></pre>

Neste exemplo, o código garante que apenas valores maiores que zero sejam armazenados na propriedade Quantidade, ajudando a manter os dados consistentes.

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