Tekrar - Sipariş Takipçisi
Coddy'nin Kotlin Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 36 / 57.
Görev
OrtaBu bölümdeki özel sınıflarla siparişleri takip edin.
Statusenum'u, her birinin birlabel'ı (new,paid, ...) bulunanNEW,PAID,SHIPPED,DELIVEREDveCANCELLEDsabitlerine ve şu işleve sahiptir:canMoveTo(next): new paid veya cancelled olabilir, paid shipped veya cancelled olabilir, shipped delivered olabilir ve başka hiçbir işleme izin verilmez.Order(id, item, status), durumuNEWolarak başlayan bir veri sınıfıdır.Outcomemühürlü arayüzününUpdated(order)veRejected(id, reason)durumları vardır.Tracker.place(item), bir sonraki kimlikle (1, 2, ...) bir sipariş oluşturur ve onu döndürür.move(id, target),no such orderveyacannot go from new to deliveredile birlikteRejecteddöndürür ya da siparişin değiştirilmiş bir kopyasını kaydeder veUpdateddöndürür.summary(), enum'daki sıraya göre her durumdaki siparişlerin sayısını döndürür ve hiç sipariş olmayan durumları dışarıda bırakır:paid 1, cancelled 1veyano orders.describe(outcome), tüm durumları kapsayan birwhenkullanır ve güncellenen siparişin metnini veyarejected 2: no such orderdöndürür.
Sağlanan kod, place tea veya <status> <id> biçimindeki (örneğin paid 1) komutları okur, yerleştirilen her siparişi ve açıklanan her sonucu yazdırır ve son olarak özeti yazdırır.
Kodunuz Status.kt, Order.kt, Outcome.kt, Updated.kt, Rejected.kt, Tracker.kt ve Functions.kt dosyalarına yerleştirilmelidir. Main.kt, sağlanan girdi/çıktı kodunu içerir ve düzenlenemez.
Kendin dene
fun main() {
// Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
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())
}
Nesne Yönelimli Programlama bölümündeki tüm dersler
1Sınıflar ve Nesneler
Dosyalarla ÇalışmaSınıfları TanımlamaBirincil Yapıcılarinit Blokları ve Doğrulamaİkincil YapıcılarTekrar - Kütüphane Kartı4Kalıtım
Açık Sınıflar ve Alt SınıflarÜyeleri Geçersiz Kılmasuper ve YapıcılarSoyut SınıflarTekrar - Personel Dizini7Özel Sınıflar
Veri SınıflarıEnum SınıflarıMühürlü Hiyerarşilerequals, hashCode, toStringTekrar - Sipariş Takipçisi2Özellikler ve Kapsülleme
Özel ErişimcilerGörünürlük DeğiştiricileriÖzel Setter'larlazy ve lateinitTekrar - Banka Hesabı5Arayüzler
Arayüz BildirimleriVarsayılan MetotlarBirden Çok ArayüzTür Olarak ArayüzlerÖzet - Ödeme Yöntemleri8Generic'ler
Generic FonksiyonlarGeneric SınıflarTür Kısıtlamalarıin ve out ile VaryansTekrar - Öncelik Kuyruğu11Proje: Kütüphane Yönetimi
Kitaplar ve ÜyelerKitap Ödünç AlmaKendi başına pratik yap: Kotlin playground