Повторение — смотритель зоопарка
Часть раздела Объектно-ориентированное программирование путешествия по R на Coddy. Урок 36 из 57.
Задание
СреднеСоздайте зоопарк из классов 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 = "")
Все уроки раздела Объектно-ориентированное программирование
1Основы S3
Работа с файламиСписки с классомФункции-конструкторыМетоды print и formatВалидаторы и вспомогательные функцииПовторение — температуры4Инкапсуляция в R
Замыкания как объектыОкружения как объектыФункции доступаЗащита состоянияПовторение — парковочный счётчик7S4 Наследование
Расширение с помощью containscallNextMethodВиртуальные классыПроверка типов с помощью is()Повторение — смотритель зоопарка10Шаблоны проектирования, часть 2
Шаблон «Декоратор»Шаблон «Строитель»Шаблон «Состояние»Шаблон «Итератор»2Обобщённые функции и методы S3
Обобщённые функции и UseMethodМетоды по умолчаниюМетоды для базовых обобщённых функцийОсновы NextMethodПовторение — площади фигур5Классы S4
Определение классов S4Слоты и доступПроверка корректностиМетоды showПовторение — каталог товаров8Ссылочные классы
Определение ссылочных классовМетоды и обновление полейСемантика копированияНаследование и callSuperПовторение — очередь задач11Проект: Управление библиотекой
Книги и читателиВыдача книг3Наследование S3
Векторы классовПорядок поиска методовРасширение с помощью NextMethodПроверка с помощью inherits()Повторение — расчёт зарплаты сотрудниковПотренируйтесь самостоятельно: Онлайн-компилятор R