Задатак — Резервација биоскопске карте

← Недеља 8

Моделовати резервацију биоскопске карте.

Резервација има:

  • идентификациони број;
  • назив филма;
  • стање.

Подржати следећа стања:

Kreirana
Placena
Iskoriscena
Otkazana

Операције:

plati()
iskoristi()
otkazi()

Правила

Креирана

  • може да се плати;
  • може да се откаже;
  • не може да се искористи.

Placena

  • може да се искористи;
  • може да се откаже;
  • не може поново да се плати.

Iskoriscena

  • више не дозвољава ниједну од три операције.

Отказана

  • више не дозвољава ниједну од три операције.

Захтеви

Направити интерфејс:

public interface StanjeRezervacije {
    void plati(Rezervacija rezervacija);
    void iskoristi(Rezervacija rezervacija);
    void otkazi(Rezervacija rezervacija);
}

Rezervacija треба да чува:

private StanjeRezervacije stanje;

и да операције делегира тренутном стању.

Демонстрација

У Main:

  1. направити нову резервацију;
  2. покушати iskoristi() пре плаћања;
  3. платити;
  4. покушати поново да се плати;
  5. искористити резервацију;
  6. покушати отказивање након коришћења.

Питање

Зашто је ово бољи кандидат за State него класа која само има:

private String stanje;

и велики број if провера?

Самостални део — Да ли је State потребан?

Лампица има само стања укључена/искључена и операцију промени. Затим размотрити уређај са стањима искључен/загревање/спреман/грешка и различитим дозвољеним операцијама.

Критеријум провере: За оба модела прво дати табелу прелаза. Дозвољено је enum решење. Образложити где State доноси корист, а где само повећава број класа.

Предати мали Main са демонстрацијом и кратко образложење одлука. У овом делу нису задати називи класа или обавезни обрасци; образложено једноставније решење је прихватљиво. Најпре дефинисати уговор и очекивани резултат, па имплементирати.