Repaso - Cuidador del zoológico
Parte de la sección Programación orientada a objetos del Journey de R de Coddy. Lección 36 de 57.
Desafío
IntermedioConstruye un zoológico de clases S4 en cinco archivos.
Animal.R: la clase virtualAnimalcon los slotsnameykg, el genéricofood_kg(a)y un métodoshow()paraAnimalque imprimeLeo the lion eats 9.5 kg(el nombre de la clase en minúsculas, la comida con un decimal) y una nueva línea.Mammal.R: la clase virtualMammal, que contieneAnimal.Lion.RyElephant.R: mamíferos que comen el 5 % y el 4 % de su peso.Parrot.R: un animal (no un mamífero) con el slot adicionalword, que come 0.1 kg; sushow()imprime la línea del animal y despuésPolly says helloconcallNextMethod().
El código proporcionado lee líneas como lion Leo 190, elephant Ella 4000 o parrot Polly 1 hello, imprime cada animal, la comida total, el número de mamíferos y si Animal es virtual.
Tu código va en Animal.R, Mammal.R, Lion.R, Elephant.R y Parrot.R. main.R contiene el código proporcionado de entrada/salida y no se puede editar.
Pruébalo tú mismo
source("Animal.R")
source("Mammal.R")
source("Lion.R")
source("Elephant.R")
source("Parrot.R")
# Código de entrada/salida suministrado: déjalo tal como está
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 = "")
Todas las lecciones de Programación orientada a objetos
1Fundamentos de S3
Trabajar con archivosListas con una claseFunciones constructorasMétodos de impresión y formatoValidadores y auxiliaresRepaso: temperaturas4Encapsulación en R
Cierres como objetosEntornos como objetosFunciones de accesoProtección del estadoRepaso: parquímetro7S4 Herencia
Extender con containscallNextMethodClases virtualesComprobar tipos con is()Repaso - Cuidador del zoológico2S3 Genéricos y métodos
Genéricos y UseMethodMétodos predeterminadosMétodos para genéricos baseFundamentos de NextMethodRepaso: áreas de figuras5Clases S4
Definición de clases S4Slots y accesoComprobaciones de validezMétodos showRepaso - Catálogo de productos8Clases de referencia
Definición de clases de referenciaMétodos y actualizaciones de camposSemántica de copiaHerencia y callSuperRepaso: cola de tareas11Proyecto: Gestión de biblioteca
Libros y miembrosPréstamo de librosPractica por tu cuenta: Compilador de R online