Задатак — Резервација биоскопске карте
Моделовати резервацију биоскопске карте.
Резервација има:
- идентификациони број;
- назив филма;
- стање.
Подржати следећа стања:
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:
- направити нову резервацију;
- покушати
iskoristi()пре плаћања; - платити;
- покушати поново да се плати;
- искористити резервацију;
- покушати отказивање након коришћења.
Питање
Зашто је ово бољи кандидат за State него класа која само има:
private String stanje;
и велики број if провера?
Самостални део — Да ли је State потребан?
Лампица има само стања укључена/искључена и операцију промени. Затим размотрити уређај са стањима искључен/загревање/спреман/грешка и различитим дозвољеним операцијама.
Критеријум провере: За оба модела прво дати табелу прелаза. Дозвољено је enum решење. Образложити где State доноси корист, а где само повећава број класа.
Предати мали Main са демонстрацијом и кратко образложење одлука. У овом делу
нису задати називи класа или обавезни обрасци; образложено једноставније решење
је прихватљиво. Најпре дефинисати уговор и очекивани резултат, па имплементирати.