Завршни задатак — Рефакторисање система доставе

← Недеља 13

Овај задатак је намењен за самостално повезивање градива.

Имамо систем доставе пакета.

Почетна имплементација чува:

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.

Образложити одлуку.


Тестови

Написати најмање три мала теста:

  1. цена стандардне доставе;
  2. исправна транзиција KREIRANA → PREUZETA;
  3. покушај да се отказана пошиљка испоручи.

Тестови не треба да зависе од GUI-ја.


Најважније

Није циљ да решење има што више класа.

За сваку уведену апстракцију треба моћи одговорити:

Који конкретан проблем ова апстракција решава?

Самостални део — Промена захтева

Систему изнајмљивања додати електрични тротинет и викенд обрачун са попустом 20%. Правило избора викенд обрачуна одређује позивалац; не уводити календар.

Критеријум провере: Тротинет има депозит 1000. За цену 5000/дан и два дана викенд цена је 8000. Додати тест; постојеће тестове сачувати. Написати који фајлови су се променили и зашто.

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