2
respostas

[Projeto] Exercício Hotel

import 'package:dart_application_1/cliente.dart';

void main() {
  final Cliente augusto = Cliente('Augusto Meireles', []);

  augusto.reservarQuarto(2);
  augusto.reservarQuarto(6);
  augusto.reservarQuarto(6);

}
class Cliente {
  String nome;
  List<int> _quartosReservados;

  Cliente(this.nome, this._quartosReservados);

  bool isQuartoReservado(int quarto) {
    if (_quartosReservados.isEmpty) {
      return false;
    }

    for (var i = 0; i < _quartosReservados.length; i++) {
      if (quarto == _quartosReservados[i]) {
        return true;
      }
    }

    return false;
  }

  void mostrarReservas() {
    print(_quartosReservados.length);
  }

  void mostrarQuartos() {
    print(_quartosReservados);
  }

  void reservarQuarto(int quarto) {
    if (isQuartoReservado(quarto)) {
      print('O quarto de número "$quarto" quarto já está reservado');
      return;
    }
    _quartosReservados.add(quarto);
    print('Quarto $quarto reservado com sucesso');
  }

  void cancelarReserva(int quarto) {
    if (!isQuartoReservado(quarto)) {
      print('O quarto $quarto não está reservado');
      return;
    }

    _quartosReservados.remove(quarto);
    print('Reserva do quarto $quarto cancelada com sucesso');
  }
}
class Quarto {
  int numQuarto;

  Quarto(
    this.numQuarto
  );

}

Achei estranho privar o número de reservas, assim não foi possível dar um print no main com o número de reservas que o cliente tem nem os números dos quratos.

2 respostas

Outra dúvida, como eu poderia adicionar a lista as reservas sem usar o .add e como eu poderia remover da lista a reserva sem o .remove?

Olá, Augusto, como vai?

Seu código atende bem aos requisitos propostos no exercício e demonstra um bom entendimento de orientação a objetos, encapsulamento e uso de métodos para controlar o estado interno da classe. A lista de quartos está corretamente definida como privada e todas as operações passam por métodos da própria classe, o que está alinhado com o objetivo da atividade.

Sobre o estranhamento em não conseguir acessar a lista ou a quantidade de reservas pelo main, isso é um efeito esperado do encapsulamento. Quando um atributo é privado, ele não deve ser exposto diretamente. A forma correta de resolver isso é por meio de métodos públicos que retornem essas informações de maneira controlada. Por exemplo, um método que retorne a quantidade de reservas ou uma cópia da lista de quartos reservados. Dessa forma, você mantém a proteção dos dados e ainda consegue consultá-los externamente.

Em relação à sua outra dúvida, sobre não usar o add e o remove, tecnicamente é possível manipular listas criando novas listas a partir da existente. Para adicionar, você pode criar uma nova lista usando o operador spread, combinando os valores atuais com o novo quarto.

Por exemplo:

_quartosReservados = [..._quartosReservados, quarto];

Para remover, pode usar métodos como where para gerar uma nova lista filtrando o quarto que deseja excluir.

_quartosReservados = _quartosReservados.where((q) => q != quarto).toList();

Essa abordagem é comum quando se busca um estilo mais imutável, embora para esse exercício o uso de add e remove esteja totalmente adequado e correto.

Espero ter ajudado.

Siga firme nos seus estudos e conte com o fórum sempre que precisar.

Abraços :)

Caso este post tenha lhe ajudado, por favor, marcar como solucionado