Menu
Coddy logo textTech

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.

challenge icon

Desafio

Médio

Construa um zoológico de classes S4 em cinco arquivos.

  • Animal.R: a classe virtual Animal com os slots name e kg, o genérico food_kg(a) e um método show() para Animal que imprime Leo 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 virtual Mammal, que contém Animal.
  • Lion.R e Elephant.R: mamíferos que comem 5% e 4% de seu peso.
  • Parrot.R: um animal (não um mamífero) com o slot extra word, que come 0.1 kg; seu show() imprime a linha do animal e depois Polly says hello com callNextMethod().

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

Pratique por conta própria: Compilador de R online