Récapitulatif - Suivi des commandes
Fait partie de la section Programmation orientée objet du Journey Kotlin de Coddy. Leçon 36 sur 57.
Défi
MoyenSuivez les commandes avec les classes spéciales de ce chapitre.
- L’énumération
Statuspossède les constantesNEW,PAID,SHIPPED,DELIVEREDetCANCELLED, chacune avec unlabel(new,paid, ...), ainsi quecanMoveTo(next): new peut devenir paid ou cancelled, paid peut devenir shipped ou cancelled, shipped peut devenir delivered, et aucune autre transition n’est autorisée. Order(id, item, status)est une classe de données dont le statut commence àNEW.- L’interface scellée
Outcomepossède les casUpdated(order)etRejected(id, reason). Tracker.place(item)crée une commande avec l’identifiant suivant (1, 2, ...) et la renvoie.move(id, target)renvoieRejectedavecno such orderoucannot go from new to delivered, ou bien enregistre une copie modifiée de la commande et renvoieUpdated.summary()renvoie le nombre de commandes par statut dans l’ordre de l’énumération, en excluant les statuts qui n’en ont aucune :paid 1, cancelled 1, ouno orders.describe(outcome)utilise unwhenexhaustif et renvoie le texte de la commande mise à jour ourejected 2: no such order.
Le code fourni lit les commandes place tea ou <status> <id>, telles que paid 1, affiche chaque commande créée, chaque résultat décrit et enfin le récapitulatif.
Votre code doit se trouver dans Status.kt, Order.kt, Outcome.kt, Updated.kt, Rejected.kt, Tracker.kt et Functions.kt. Main.kt contient le code fourni d’entrée/sortie et ne peut pas être modifié.
Essayez vous-même
fun main() {
// Code d'entrée/sortie fourni : le garder tel quel
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())
}
Toutes les leçons de Programmation orientée objet
1Classes et objets
Travailler avec des fichiersDéfinir des classesConstructeurs primairesBlocs init et validationConstructeurs secondairesRécapitulatif - Carte de bibliothèque4Héritage
Classes ouvertes et sous-classesRedéfinition des membressuper et constructeursClasses abstraitesRécapitulatif – Annuaire du personnel7Classes spéciales
Classes de donnéesClasses EnumHiérarchies scelléesequals, hashCode, toStringRécapitulatif - Suivi des commandes2Propriétés et encapsulation
Accesseurs personnalisésModificateurs de visibilitéSetters privéslazy et lateinitRécapitulatif - Compte bancaire5Interfaces
Déclarer des interfacesMéthodes par défautInterfaces multiplesInterfaces en tant que typesRécapitulatif - Méthodes de paiement8Génériques
Fonctions génériquesClasses génériquesContraintes de typeVariance avec in et outRécapitulatif - File de priorité11Projet : Gestion de bibliothèque
Livres et membresEmprunter des livresEntraînez-vous par vous-même : Playground Kotlin