Rückblick – Parkuhr
Teil des Abschnitts Objektorientierte Programmierung der R-Journey von Coddy. Lektion 21 von 57.
Aufgabe
MittelVervollständige die Factory make_meter(rate) in Meter.R. rate ist die Anzahl der Minuten, die ein Cent kauft; sperre ihn mit lockBinding() innerhalb der Factory, sodass er sich niemals ändern kann. Der Zähler speichert die verbleibenden Minuten und die bezahlten Cents als private Variablen und gibt vier Funktionen zurück:
insert(cents)akzeptiert nur 10, 20, 50 oder 100 und bricht andernfalls mitcoin not acceptedab; jede Münze addiertcents * rateMinuten und wird auf den bezahlten Betrag angerechnet.wait(minutes)lässt Zeit vergehen: Die verbleibenden Minuten werden weniger, aber niemals kleiner als 0. Ein negatives Warten bricht mittime cannot go backab.status()gibt12 min leftzurück oderexpired, wenn keine Zeit mehr übrig ist.paid()gibt die bezahlten Cents zurück.
Verwende call. = FALSE. Der bereitgestellte Code liest den Tarif ein, anschließend die Zeilen coin 20 oder wait 5, und gibt nach jeder Zeile den Status oder error: sowie die Nachricht aus. Zum Schluss gibt er den bezahlten Betrag aus und versucht, rate innerhalb der Umgebung der Factory zu ändern.
Dein Code gehört in Meter.R. main.R enthält den bereitgestellten Eingabe-/Ausgabecode und darf nicht bearbeitet werden.
Probier es selbst
source("Meter.R")
# Gelieferter Ein-/Ausgabe-Code: belasse ihn wie er ist
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 = "")
Alle Lektionen in Objektorientierte Programmierung
1S3-Grundlagen
Arbeiten mit DateienListen mit einer KlasseKonstruktorfunktionenPrint- und Format-MethodenValidatoren und HilfsfunktionenRückblick – Temperaturen4Kapselung in R
Closures als ObjekteUmgebungen als ObjekteZugriffsfunktionenZustand schützenRückblick – Parkuhr2S3-Generics und Methoden
Generics und UseMethodStandardmethodenMethoden für Basis-GenericsGrundlagen von NextMethodWiederholung – Flächeninhalte von Formen5S4-Klassen
S4-Klassen definierenSlots und ZugriffGültigkeitsprüfungenShow-MethodenRückblick – Produktkatalog8Referenzklassen
Referenzklassen definierenMethoden und FeldänderungenKopiersemantikVererbung und callSuperZusammenfassung – Aufgabenwarteschlange11Projekt: Bibliotheksverwaltung
Bücher und MitgliederBücher ausleihenÜbe selbstständig: Online-R-Compiler