Récapitulatif - Gardien de zoo
Fait partie de la section Programmation orientée objet du Journey R de Coddy. Leçon 36 sur 57.
Défi
MoyenConstruisez un zoo de classes S4 réparties sur cinq fichiers.
Animal.R: la classe virtuelleAnimalavec les slotsnameetkg, le génériquefood_kg(a)et une méthodeshow()pourAnimalqui afficheLeo 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 virtuelleMammal, qui contientAnimal.Lion.RetElephant.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émentaireword, qui mange 0.1 kg ; sa méthodeshow()affiche la ligne de l’animal, puisPolly says helloaveccallNextMethod().
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
1Bases de S3
Travailler avec les fichiersListes avec une classeFonctions constructricesMéthodes print et formatValidateurs et fonctions utilitairesRécapitulatif - Températures4Encapsulation dans R
Les fermetures comme objetsLes environnements comme objetsFonctions d’accèsProtéger l’étatRécapitulatif - Parcmètre7S4 Héritage
Extension avec containscallNextMethodClasses virtuellesVérifier les types avec is()Récapitulatif - Gardien de zoo2S3 : génériques et méthodes
Génériques et UseMethodMéthodes par défautMéthodes pour les génériques de baseNotions de base sur NextMethodRécapitulatif - Aires des formes5Classes S4
Définir des classes S4Slots et accèsVérifications de validitéMéthodes showRécapitulatif - Catalogue de produits8Classes de référence
Définition des classes de référenceMéthodes et mises à jour des champsSémantique de copieHéritage et callSuperRécapitulatif - File d’attente des tâches11Projet : gestion de bibliothèque
Livres et membresEmprunter des livres3Héritage S3
Vecteurs de classesOrdre de recherche des méthodesÉtendre avec NextMethodVérifier avec inherits()Récapitulatif - Paie du personnelEntraînez-vous par vous-même : Compilateur R en ligne