Riepilogo - Guardiano dello zoo
Fa parte della sezione Programmazione orientata agli oggetti del percorso R di Coddy. Lezione 36 di 57.
Sfida
MedioCrea uno zoo di classi S4 in cinque file.
Animal.R: la classe virtualeAnimalcon gli slotnameekg, il genericofood_kg(a)e un metodoshow()perAnimalche stampaLeo the lion eats 9.5 kg(nome della classe in minuscolo, quantità di cibo con una cifra decimale) e una nuova riga.Mammal.R: la classe virtualeMammal, che contieneAnimal.Lion.RedElephant.R: mammiferi che mangiano rispettivamente il 5% e il 4% del proprio peso.Parrot.R: un animale (non un mammifero) con lo slot aggiuntivoword, che mangia 0.1 kg; il suoshow()stampa la riga dell'animale e poiPolly says helloconcallNextMethod().
Il codice fornito legge righe lion Leo 190, elephant Ella 4000 oppure parrot Polly 1 hello, stampa ogni animale, il cibo totale, il numero di mammiferi e se Animal è virtuale.
Il tuo codice va inserito in Animal.R, Mammal.R, Lion.R, Elephant.R e Parrot.R. main.R contiene il codice di input/output fornito e non può essere modificato.
Provalo tu
source("Animal.R")
source("Mammal.R")
source("Lion.R")
source("Elephant.R")
source("Parrot.R")
# Codice di input/output fornito: lascialo così com'è
input <- suppressWarnings(readLines(file("stdin")))
zoo <- list()
for (line in input) {
p <- strsplit(line, " ")[[1]]
kg <- as.numeric(p[3])
a <- switch(p[1],
lion = new("Lion", name = p[2], kg = kg),
elephant = new("Elephant", name = p[2], kg = kg),
parrot = new("Parrot", name = p[2], kg = kg, word = p[4]))
zoo[[length(zoo) + 1]] <- a
print(a)
}
cat(sprintf("food per day: %.1f kg", sum(vapply(zoo, food_kg, numeric(1)))), "\n", sep = "")
cat("mammals: ", sum(vapply(zoo, is, logical(1), "Mammal")), "\n", sep = "")
cat("Animal is virtual: ", isVirtualClass("Animal"), "\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 - Parcometro7S4 Ereditarietà
Estendere con containscallNextMethodClassi virtualiVerificare i tipi con is()Riepilogo - Guardiano dello zoo2Generics 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