Podsumowanie — śledzenie zamówień
Część sekcji Programowanie obiektowe ścieżki Kotlin w Coddy. Lekcja 36 z 57.
Wyzwanie
ŚredniŚledź zamówienia za pomocą specjalnych klas z tego rozdziału.
- Wyliczenie
Statusma stałeNEW,PAID,SHIPPED,DELIVEREDiCANCELLED, każda z etykietąlabel(new,paid, ...), orazcanMoveTo(next): stan new może zmienić się na paid lub cancelled, paid może zmienić się na shipped lub cancelled, shipped może zmienić się na delivered, a żadne inne przejścia nie są dozwolone. Order(id, item, status)jest klasą danych, której status początkowo ma wartośćNEW.- Zap sealed
Outcomema przypadkiUpdated(order)iRejected(id, reason). Tracker.place(item)tworzy zamówienie z kolejnym id (1, 2, ...) i je zwraca.move(id, target)zwracaRejectedz wartościąno such orderlubcannot go from new to delivered, albo zapisuje zmienioną kopię zamówienia i zwracaUpdated.summary()zwraca liczbę zamówień dla każdego statusu w kolejności wyliczenia, pomijając statusy, których nie ma:paid 1, cancelled 1lubno orders.describe(outcome)używa wyczerpującego wyrażeniawheni zwraca tekst zaktualizowanego zamówienia lubrejected 2: no such order.
Dostarczony kod odczytuje polecenia place tea lub <status> <id>, takie jak paid 1, wyświetla każde utworzone zamówienie, każdy opisany wynik, a na końcu podsumowanie.
Twój kod umieść w plikach Status.kt, Order.kt, Outcome.kt, Updated.kt, Rejected.kt, Tracker.kt i Functions.kt. Main.kt zawiera dostarczony kod wejścia/wyjścia i nie można go edytować.
Spróbuj swoich sił
fun main() {
// Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
val input = generateSequence(::readLine).toList()
val tracker = Tracker()
for (cmd in input) {
val p = cmd.split(" ")
if (p[0] == "place") {
println(tracker.place(p[1]))
} else {
val target = Status.entries.find { it.label == p[0] }
if (target == null) println("unknown status ${p[0]}")
else println(describe(tracker.move(p[1].toInt(), target)))
}
}
println(tracker.summary())
}
Wszystkie lekcje w sekcji Programowanie obiektowe
1Klasy i obiekty
Praca z plikamiDefiniowanie klasKonstruktory główneBloki init i walidacjaKonstruktory dodatkowePodsumowanie — karta biblioteczna4Dziedziczenie
Klasy otwarte i podklasyNadpisywanie składowychsuper i konstruktoryKlasy abstrakcyjnePodsumowanie – katalog pracowników7Klasy specjalne
Klasy danychKlasy wyliczenioweHierarchie zapieczętowaneequals, hashCode, toStringPodsumowanie — śledzenie zamówień10Wzorce projektowe, część 2
Delegowanie za pomocą byWzorzec dekoratoraWzorzec budowniczegoWzorzec stanu2Właściwości i hermetyzacja
Własne akcesoryModyfikatory widocznościPrywatne setterylazy i lateinitPowtórka – konto bankowe5Interfejsy
Deklarowanie interfejsówMetody domyślneWiele interfejsówInterfejsy jako typyPowtórzenie – metody płatności8Typy generyczne
Funkcje generyczneKlasy generyczneOgraniczenia typówKowariancja i kontrawariancja: in i outPodsumowanie — kolejka priorytetowa11Projekt: Zarządzanie biblioteką
Książki i czytelnicyWypożyczanie książekPoćwicz samodzielnie: Edytor online Kotlin