Завршни задатак — Рефакторисање система доставе
Овај задатак је намењен за самостално повезивање градива.
Имамо систем доставе пакета.
Почетна имплементација чува:
vrsta dostave: "STANDARDNA", "EKSPRESNA"
status: "KREIRANA", "PREUZETA", "ISPORUCENA", "OTKAZANA"
tip paketa: "OBICAN", "LOMLJIV"
и користи велики број:
if
switch
провера.
Потребно је осмислити бољи ООП модел.
Почетни код је src/zadatak_pocetni/Dostava.java. Покренути га, забележити очекивања,
па рефакторисати у сопственом пакету. Оригинал сачувати ради поређења.
Цена стандардне доставе је 200 + 50 динара за сваки започети килограм; експресна је двострука стандардна цена. Маса је целобројни број грама, 1–50000. За 1500 г цене су 300 и 600. Отказивање је дозвољено само из KREIRANA; испорука само из PREUZETA. Завршена и отказана пошиљка не прихватају нове операције.
LOMLJIV је за сада само ознака и не мења цену или транзиције. То је намерно: не треба правити подкласу без разлике у понашању. У завршном моделу додати регистар који одбија дупле идентификационе бројеве, уместо да препише стару пошиљку.
Захтеви
Пакет
Сваки пакет има:
- идентификациони број;
- масу;
- пошиљаоца;
- примаоца.
Размислити да ли:
ObicanPaket
LomljivPaket
заиста треба да буду подкласе.
Ако имају различито понашање, објаснити које.
Ако немају, немојте уводити наслеђивање само због назива.
Обрачун доставе
Подржати:
StandardniObracun
EkspresniObracun
без великог if гранања у класи Posiljka.
Животни циклус
Posiljka пролази кроз:
KREIRANA
PREUZETA
ISPORUCENA
OTKAZANA
Операције:
preuzmi
isporuci
otkazi
Нису све дозвољене у сваком стању.
Колекције
Систем треба да:
- брзо пронађе пошиљку по идентификационом броју;
- врати листу свих пошиљки.
Изабрати одговарајуће колекције и образложити избор.
Грешке
Размислити како представити:
nepostojeća pošiljka
nedozvoljena tranzicija
neispravna masa
Не мора свака грешка бити цхецкед exception.
Образложити одлуку.
Тестови
Написати најмање три мала теста:
- цена стандардне доставе;
- исправна транзиција
KREIRANA → PREUZETA; - покушај да се отказана пошиљка испоручи.
Тестови не треба да зависе од GUI-ја.
Најважније
Није циљ да решење има што више класа.
За сваку уведену апстракцију треба моћи одговорити:
Који конкретан проблем ова апстракција решава?
Самостални део — Промена захтева
Систему изнајмљивања додати електрични тротинет и викенд обрачун са попустом 20%. Правило избора викенд обрачуна одређује позивалац; не уводити календар.
Критеријум провере: Тротинет има депозит 1000. За цену 5000/дан и два дана викенд цена је 8000. Додати тест; постојеће тестове сачувати. Написати који фајлови су се променили и зашто.
Предати мали Main са демонстрацијом и кратко образложење одлука. У овом делу
нису задати називи класа или обавезни обрасци; образложено једноставније решење
је прихватљиво. Најпре дефинисати уговор и очекивани резултат, па имплементирати.