Menu
Coddy logo textTech

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.

challenge icon

Desafío

Intermedio

Construye un zoológico de clases S4 en cinco archivos.

  • Animal.R: la clase virtual Animal con los slots name y kg, el genérico food_kg(a) y un método show() para Animal que imprime Leo 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 virtual Mammal, que contiene Animal.
  • Lion.R y Elephant.R: mamíferos que comen el 5 % y el 4 % de su peso.
  • Parrot.R: un animal (no un mamífero) con el slot adicional word, que come 0.1 kg; su show() imprime la línea del animal y después Polly says hello con callNextMethod().

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

Practica por tu cuenta: Compilador de R online