Парковочный гараж
Часть раздела Объектно-ориентированное программирование путешествия по R на Coddy. Урок 55 из 57.
Задание
СложноСоздайте гараж. Vehicle.R объявляет виртуальный S4-класс Vehicle (слот plate), обобщённые функции size_rank(v) и rate(v), а также имена SIZES: small, medium, large для рангов 1, 2 и 3.
- В
Motorbike.R,Car.RиVan.Rобъявлены классы; добавьте их методы: мотоцикл имеет ранг 1 и платит 1 за час, автомобиль — ранг 2 и 3 за час, фургон — ранг 3 и 5 за час. - В
Garage.Rзавершите ссылочный классGarage. Его полеfreeхранит количество свободных мест для каждого ранга, аparkedявляется списком, индексированным по номерному знаку.park(v)занимает свободное место собственного ранга транспортного средства или, если свободных мест нет, место следующего большего ранга и возвращаетparked AB12 in medium,full for AB12илиAB12 is already parked.leave(plate, hours)освобождает место и возвращаетAB12 paid 9(тариф, умноженный на количество часов, но не менее 1 часа) илиno vehicle AB12.status()возвращаетfree: small 1, medium 0, large 2; parked: 1.
Предоставленный код считывает количество свободных мест как small,medium,large, затем принимает команды park car AB12 (bike, car или van), leave AB12 3 или status и выводит каждый ответ.
Ваш код должен находиться в Vehicle.R, Motorbike.R, Car.R, Van.R и Garage.R. В main.R содержится предоставленный код ввода/вывода, и его нельзя редактировать.
Попробуйте сами
source("Vehicle.R")
source("Motorbike.R")
source("Car.R")
source("Van.R")
source("Garage.R")
# Предоставленный код ввода/вывода: оставьте его как есть
input <- suppressWarnings(readLines(file("stdin")))
garage <- Garage$new(free = as.numeric(strsplit(input[1], ",")[[1]]))
for (line in input[-1]) {
p <- strsplit(line, " ")[[1]]
reply <- switch(p[1],
park = garage$park(switch(p[2],
bike = new("Motorbike", plate = p[3]),
car = new("Car", plate = p[3]),
van = new("Van", plate = p[3]))),
leave = garage$leave(p[2], as.numeric(p[3])),
status = garage$status())
cat(reply, "\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