Parkhaus
Teil des Abschnitts Objektorientierte Programmierung der R-Journey von Coddy. Lektion 55 von 57.
Aufgabe
SchwerErstelle ein Parkhaus. Vehicle.R deklariert die virtuelle S4-Klasse Vehicle (Slot plate), die Generics size_rank(v) und rate(v) sowie die Namen SIZES: small, medium, large für die Ränge 1, 2 und 3.
- In
Motorbike.R,Car.RundVan.Rwerden die Klassen deklariert; füge ihre Methoden hinzu: Ein Motorrad hat Rang 1 und zahlt 1 pro Stunde, ein Auto Rang 2 und 3 pro Stunde, ein Lieferwagen Rang 3 und 5 pro Stunde. - Vervollständige in
Garage.Rdie ReferenzklasseGarage. Ihr Feldfreeenthält die freien Stellplätze pro Rang, undparkedist eine nach Kennzeichen indizierte Liste.park(v)nimmt einen freien Stellplatz des eigenen Fahrzeugrangs oder, falls keiner frei ist, des nächsthöheren Rangs und gibtparked AB12 in medium,full for AB12oderAB12 is already parkedzurück.leave(plate, hours)gibt den Stellplatz frei und gibtAB12 paid 9(den Tarif multipliziert mit der Anzahl der Stunden, mindestens 1 Stunde) oderno vehicle AB12zurück.status()gibtfree: small 1, medium 0, large 2; parked: 1zurück.
Der bereitgestellte Code liest die freien Stellplätze als small,medium,large ein, anschließend die Befehle park car AB12 (bike, car oder van), leave AB12 3 oder status, und gibt jede Antwort aus.
Dein Code gehört in Vehicle.R, Motorbike.R, Car.R, Van.R und Garage.R. main.R enthält den bereitgestellten Eingabe-/Ausgabecode und darf nicht bearbeitet werden.
Probier es selbst
source("Vehicle.R")
source("Motorbike.R")
source("Car.R")
source("Van.R")
source("Garage.R")
# Gelieferter Input-/Output-Code: belasse ihn wie er ist
input <- suppressWarnings(readLines(file("stdin")))
garage <- Garage$new(free = as.numeric(strsplit(input[1], ",")[[1]]))
for (line in input[-1]) {
p <- strsplit(line, " ")[[1]]
reply <- switch(p[1],
park = garage$park(switch(p[2],
bike = new("Motorbike", plate = p[3]),
car = new("Car", plate = p[3]),
van = new("Van", plate = p[3]))),
leave = garage$leave(p[2], as.numeric(p[3])),
status = garage$status())
cat(reply, "\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