Olá, Eduardo. Como vai?
Parabéns por mais essa excelente entrega! Seu sistema de reservas de hotel é um exemplo perfeito de como a Orientação a Objetos organiza a comunicação entre diferentes entidades (Hospede, Quarto e Reserva) de forma harmoniosa e protegida.
Gostaria de destacar os pontos técnicos que tornam seu código muito sólido:
- Validação em Setters: Você aplicou o encapsulamento clássico na propriedade
ValorDiaria. Ao usar o set com uma condicional, você garante que o sistema nunca aceite valores irreais (como diárias negativas), protegendo a integridade financeira do seu modelo. - Composição de Objetos: A classe
Reserva é o que chamamos de uma classe de associação. Ela "conhece" um Hospede e um Quarto. Essa é a base de grandes sistemas de software: objetos pequenos e simples que se unem para formar uma funcionalidade complexa. - Propriedade Calculada Dinâmica: O uso de
public decimal ValorTotal => diarias * Quarto.ValorDiaria; é brilhante. Se o valor da diária do quarto mudar antes do fechamento da conta, o ValorTotal estará sempre atualizado, pois ele não armazena o resultado, ele o calcula sob demanda.
Uma pequena sugestão para Evolução:
No seu construtor de Reserva, você adicionou uma validação para as diárias. Caso o valor seja menor que 1, você exibe um erro, mas o objeto Reserva ainda termina de ser criado (mesmo que com dados incompletos ou "nulos" logicamente).
Em C#, uma prática comum para garantir que um objeto nunca exista se estiver errado é o uso de Exceções:
public Reserva(Hospede hospede, Quarto quarto, int diarias)
{
if (diarias < 1)
{
// Interrompe a criação do objeto se o dado for inválido
throw new ArgumentException("O mínimo de diárias é 1.");
}
this.diarias = diarias;
Hospede = hospede;
Quarto = quarto;
}
Isso impede que o programa continue com uma reserva "fantasma" que não tem diárias definidas.
Fora esse detalhe de arquitetura, seu código está impecável e muito bem escrito, seguindo as convenções de nomes do C# (PascalCase). Você está demonstrando que já entende como as peças de um software devem se encaixar com segurança!
Espero que possa ter lhe ajudado!