Récapitulatif - Parcmètre
Fait partie de la section Programmation orientée objet du Journey R de Coddy. Leçon 21 sur 57.
Défi
MoyenComplétez la fabrique make_meter(rate) dans Meter.R. rate est le nombre de minutes qu'achète un centime ; verrouillez-le avec lockBinding() à l'intérieur de la fabrique afin qu'il ne puisse jamais changer. Le compteur conserve les minutes restantes et les centimes payés en tant que variables privées et renvoie quatre fonctions :
insert(cents)n'accepte que 10, 20, 50 ou 100 et s'arrête sinon aveccoin not accepted; chaque pièce ajoutecents * rateminutes et est comptabilisée dans le montant payé.wait(minutes)laisse le temps s'écouler : le nombre de minutes restantes diminue, mais ne descend jamais en dessous de 0. Une attente négative s'arrête avectime cannot go back.status()renvoie12 min left, ouexpiredlorsqu'il ne reste plus de temps.paid()renvoie le nombre de centimes payés.
Utilisez call. = FALSE. Le code fourni lit le tarif, puis les lignes coin 20 ou wait 5, et affiche l'état ou error: ainsi que le message après chacune d'elles. Enfin, il affiche le montant payé et tente de modifier rate dans l'environnement de la fabrique.
Votre code doit être placé dans Meter.R. main.R contient le code fourni d'entrée/sortie et ne peut pas être modifié.
Essayez vous-même
source("Meter.R")
# Code d'entrée/sortie fourni : le garder tel quel
input <- suppressWarnings(readLines(file("stdin")))
meter <- make_meter(as.numeric(input[1]))
for (line in input[-1]) {
p <- strsplit(line, " ")[[1]]
msg <- tryCatch({
if (p[1] == "coin") meter$insert(as.numeric(p[2]))
if (p[1] == "wait") meter$wait(as.numeric(p[2]))
meter$status()
}, error = function(e) paste("error:", conditionMessage(e)))
cat(line, ": ", msg, "\n", sep = "")
}
cat("paid: ", meter$paid(), " cents\n", sep = "")
r <- tryCatch({ environment(meter$insert)$rate <- 0; "rate changed" }, error = function(e) "rate is locked")
cat(r, "\n", sep = "")
Toutes les leçons de Programmation orientée objet
1Bases de S3
Travailler avec les fichiersListes avec une classeFonctions constructricesMéthodes print et formatValidateurs et fonctions utilitairesRécapitulatif - Températures4Encapsulation dans R
Les fermetures comme objetsLes environnements comme objetsFonctions d’accèsProtéger l’étatRécapitulatif - Parcmètre2S3 : génériques et méthodes
Génériques et UseMethodMéthodes par défautMéthodes pour les génériques de baseNotions de base sur NextMethodRécapitulatif - Aires des formes5Classes S4
Définir des classes S4Slots et accèsVérifications de validitéMéthodes showRécapitulatif - Catalogue de produits8Classes de référence
Définition des classes de référenceMéthodes et mises à jour des champsSémantique de copieHéritage et callSuperRécapitulatif - File d’attente des tâches11Projet : gestion de bibliothèque
Livres et membresEmprunter des livres3Héritage S3
Vecteurs de classesOrdre de recherche des méthodesÉtendre avec NextMethodVérifier avec inherits()Récapitulatif - Paie du personnelEntraînez-vous par vous-même : Compilateur R en ligne