Menu
Coddy logo textTech

Повторение — смотритель зоопарка

Часть раздела Объектно-ориентированное программирование путешествия по R на Coddy. Урок 36 из 57.

challenge icon

Задание

Средне

Создайте зоопарк из классов S4 в пяти файлах.

  • Animal.R: виртуальный класс Animal со слотами name и kg, обобщённую функцию food_kg(a) и метод show() для Animal, который выводит Leo the lion eats 9.5 kg (имя класса в нижнем регистре, количество пищи с одним десятичным знаком) и новую строку.
  • Mammal.R: виртуальный класс Mammal, содержащий Animal.
  • Lion.R и Elephant.R: млекопитающие, которые съедают 5% и 4% своего веса соответственно.
  • Parrot.R: животное (не млекопитающее) с дополнительным слотом word, съедающее 0.1 кг; его show() выводит строку о животном, а затем Polly says hello с помощью callNextMethod().

Предоставленный код считывает строки lion Leo 190, elephant Ella 4000 или parrot Polly 1 hello, выводит каждое животное, общее количество пищи, число млекопитающих и информацию о том, является ли Animal виртуальным.

Ваш код должен находиться в файлах Animal.R, Mammal.R, Lion.R, Elephant.R и Parrot.R. В main.R находится предоставленный код ввода/вывода, и его нельзя редактировать.

Попробуйте сами

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

# Предоставленный код ввода/вывода: оставьте его как есть
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 = "")

Все уроки раздела Объектно-ориентированное программирование

Потренируйтесь самостоятельно: Онлайн-компилятор R