Revisão - Cuidador do Zoológico
Parte da seção Programação Orientada a Objetos do Journey de R da Coddy. Lição 36 de 57.
Desafio
MédioConstrua um zoológico de classes S4 em cinco arquivos.
Animal.R: a classe virtualAnimalcom os slotsnameekg, o genéricofood_kg(a)e um métodoshow()paraAnimalque imprimeLeo the lion eats 9.5 kg(nome da classe em minúsculas, alimento com uma casa decimal) e uma nova linha.Mammal.R: a classe virtualMammal, que contémAnimal.Lion.ReElephant.R: mamíferos que comem 5% e 4% de seu peso.Parrot.R: um animal (não um mamífero) com o slot extraword, que come 0.1 kg; seushow()imprime a linha do animal e depoisPolly says hellocomcallNextMethod().
O código fornecido lê as linhas lion Leo 190, elephant Ella 4000 ou parrot Polly 1 hello, imprime cada animal, a quantidade total de alimento, o número de mamíferos e se Animal é virtual.
Seu código deve ser colocado em Animal.R, Mammal.R, Lion.R, Elephant.R e Parrot.R. main.R contém o código fornecido de entrada/saída e não pode ser editado.
Experimente você mesmo
source("Animal.R")
source("Mammal.R")
source("Lion.R")
source("Elephant.R")
source("Parrot.R")
# Código de entrada/saída fornecido: mantenha-o 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 as lições de Programação Orientada a Objetos
1Fundamentos do S3
Trabalhando com ArquivosListas com uma ClasseFunções ConstrutorasMétodos de Impressão e FormataçãoValidadores e AuxiliaresRevisão - Temperaturas4Encapsulamento em R
Closures como ObjetosAmbientes como ObjetosFunções de AcessoProtegendo o EstadoRecapitulação - Parquímetro7S4 Herança
Estendendo com containscallNextMethodClasses VirtuaisVerificando Tipos com is()Revisão - Cuidador do Zoológico2Genéricos e Métodos S3
Genéricos e UseMethodMétodos padrãoMétodos para genéricos baseFundamentos de NextMethodRevisão - Áreas de formas5Classes S4
Definindo classes S4Slots e acessoVerificações de validadeMétodos showRevisão - Catálogo de produtos8Classes de Referência
Definindo Classes de ReferênciaMétodos e Atualizações de CamposSemântica de CópiaHerança e callSuperRecapitulação — Fila de Tarefas11Projeto: Gerenciamento de Biblioteca
Livros e MembrosEmpréstimo de LivrosPratique por conta própria: Compilador de R online