Menu
Coddy logo textTech

Récapitulatif - Gardien de zoo

Fait partie de la section Programmation orientée objet du Journey R de Coddy. Leçon 36 sur 57.

challenge icon

Défi

Moyen

Construisez un zoo de classes S4 réparties sur cinq fichiers.

  • Animal.R : la classe virtuelle Animal avec les slots name et kg, le générique food_kg(a) et une méthode show() pour Animal qui affiche Leo the lion eats 9.5 kg (nom de classe en minuscules, nourriture avec une décimale), puis un retour à la ligne.
  • Mammal.R : la classe virtuelle Mammal, qui contient Animal.
  • Lion.R et Elephant.R : des mammifères qui mangent respectivement 5 % et 4 % de leur poids.
  • Parrot.R : un animal (et non un mammifère) avec le slot supplémentaire word, qui mange 0.1 kg ; sa méthode show() affiche la ligne de l’animal, puis Polly says hello avec callNextMethod().

Le code fourni lit des lignes telles que lion Leo 190, elephant Ella 4000 ou parrot Polly 1 hello, affiche chaque animal, la quantité totale de nourriture, le nombre de mammifères et indique si Animal est virtuelle.

Votre code doit être placé dans Animal.R, Mammal.R, Lion.R, Elephant.R et Parrot.R. main.R contient le code d’entrée/sortie fourni et ne peut pas être modifié.

Essayez vous-même

source("Animal.R")
source("Mammal.R")
source("Lion.R")
source("Elephant.R")
source("Parrot.R")

# Code d'entrée/sortie fourni : le garder tel quel
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 = "")

Toutes les leçons de Programmation orientée objet

Entraînez-vous par vous-même : Compilateur R en ligne