Parking
Fait partie de la section Programmation orientée objet du Journey R de Coddy. Leçon 55 sur 57.
Défi
DifficileConstruisez un garage de stationnement. Vehicle.R déclare la classe S4 virtuelle Vehicle (slot plate), les génériques size_rank(v) et rate(v), ainsi que les noms SIZES : small, medium, large pour les rangs 1, 2 et 3.
- Dans
Motorbike.R,Car.RetVan.R, les classes sont déclarées ; ajoutez leurs méthodes : une moto a le rang 1 et paie 1 par heure, une voiture le rang 2 et 3 par heure, une camionnette le rang 3 et 5 par heure. - Dans
Garage.R, complétez la classe de référenceGarage. Son champfreecontient les places libres par rang etparkedest une liste indexée par plaque.park(v)prend une place libre du rang propre au véhicule ou, si aucune n'est libre, du rang immédiatement supérieur, et renvoieparked AB12 in medium,full for AB12ouAB12 is already parked.leave(plate, hours)libère la place et renvoieAB12 paid 9(le tarif multiplié par le nombre d'heures, avec au moins 1 heure) ouno vehicle AB12.status()renvoiefree: small 1, medium 0, large 2; parked: 1.
Le code fourni lit les places libres sous la forme small,medium,large, puis les commandes park car AB12 (bike, car ou van), leave AB12 3 ou status, et affiche chaque réponse.
Votre code doit être placé dans Vehicle.R, Motorbike.R, Car.R, Van.R et Garage.R. main.R contient le code fourni d'entrée/sortie et ne peut pas être modifié.
Essayez vous-même
source("Vehicle.R")
source("Motorbike.R")
source("Car.R")
source("Van.R")
source("Garage.R")
# Code d'entrée/sortie fourni : le garder tel quel
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 = "")
}
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