Parcheggio
Fa parte della sezione Programmazione orientata agli oggetti del percorso R di Coddy. Lezione 55 di 57.
Sfida
DifficileCrea un garage. Vehicle.R dichiara la classe S4 virtuale Vehicle (slot plate), i generici size_rank(v) e rate(v) e i nomi SIZES: small, medium, large per i ranghi 1, 2 e 3.
- In
Motorbike.R,Car.ReVan.Rvengono dichiarate le classi; aggiungi i loro metodi: una moto ha rango 1 e paga 1 all'ora, un'auto ha rango 2 e paga 3 all'ora, un furgone ha rango 3 e paga 5 all'ora. - In
Garage.Rcompleta la classe di riferimentoGarage. Il campofreecontiene i posti liberi per rango eparkedè una lista indicizzata per targa.park(v)occupa un posto libero del rango del veicolo o, se non ce ne sono, del rango successivo più grande, e restituisceparked AB12 in medium,full for AB12oppureAB12 is already parked.leave(plate, hours)libera il posto e restituisceAB12 paid 9(la tariffa moltiplicata per le ore, per almeno 1 ora) oppureno vehicle AB12.status()restituiscefree: small 1, medium 0, large 2; parked: 1.
Il codice fornito legge i posti liberi come small,medium,large, poi i comandi park car AB12 (bike, car o van), leave AB12 3 oppure status, e stampa ogni risposta.
Il tuo codice va inserito in Vehicle.R, Motorbike.R, Car.R, Van.R e Garage.R. main.R contiene il codice di input/output fornito e non può essere modificato.
Provalo tu
source("Vehicle.R")
source("Motorbike.R")
source("Car.R")
source("Van.R")
source("Garage.R")
# Codice di input/output fornito: lascialo così com'è
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 = "")
}
Tutte le lezioni di Programmazione orientata agli oggetti
1Nozioni di base su S3
Lavorare con i fileListe con una classeFunzioni costruttriciMetodi di stampa e formattazioneValidatori e funzioni di supportoRipasso - Temperature4Incapsulamento in R
Chiusure come oggettiAmbienti come oggettiFunzioni di accessoProteggere lo statoRiepilogo - Parcometro2Generics e metodi S3
Generics e UseMethodMetodi predefinitiMetodi per i generics di baseNozioni di base su NextMethodRiepilogo - Aree delle forme5Classi S4
Definire le classi S4Slot e accessoControlli di validitàMetodi showRiepilogo - Catalogo prodotti8Classi di riferimento
Definizione delle classi di riferimentoMetodi e aggiornamenti dei campiSemantica della copiaEreditarietà e callSuperRiepilogo - coda di attività11Progetto: Gestione della biblioteca
Libri e iscrittiPrestito dei libriEsercitati da solo: Compilatore R online