Повторение — очередь задач
Часть раздела Объектно-ориентированное программирование путешествия по R на Coddy. Урок 41 из 57.
Задание
СреднеСоздайте очередь задач с использованием двух Reference-классов. Оба определения обёрнуты в suppressMessages().
TaskвTask.R: поляtitle,priority(числовое) иdone(логическое);initializeделаетdoneравнымFALSE, если оно не задано;label()возвращает[x] fix (3)для завершённой задачи или[ ] fix (3).TaskQueueвTaskQueue.R: полеtasks(объектlist);add(title, priority)добавляет новуюTaskи возвращаетinvisible(.self);next_task()возвращает название открытой задачи с наивысшим приоритетом (при равенстве — той, которая была добавлена раньше), либоnothing;complete(title)помечает первую открытую задачу с таким названием как выполненную и возвращаетTRUEилиFALSE;report()возвращает по одной метке для каждой задачи в порядке добавления, а затемopen: 2.
Предоставленный код считывает add fix 3, next и done fix, затем добавляет две задачи одним цепочным вызовом и выводит отчёт.
Ваш код должен находиться в Task.R и TaskQueue.R. В main.R содержится предоставленный код ввода/вывода, и его нельзя редактировать.
Попробуйте сами
source("Task.R")
source("TaskQueue.R")
# Предоставленный код ввода/вывода: оставьте его как есть
input <- suppressWarnings(readLines(file("stdin")))
q <- TaskQueue$new()
for (line in input) {
p <- strsplit(line, " ")[[1]]
if (p[1] == "add") {
q$add(p[2], as.numeric(p[3]))
} else if (p[1] == "next") {
cat("next: ", q$next_task(), "\n", sep = "")
} else if (p[1] == "done") {
cat(if (q$complete(p[2])) "completed " else "no open task ", p[2], "\n", sep = "")
}
}
q$add("late", 1)$add("later", 1)
writeLines(q$report())
Все уроки раздела Объектно-ориентированное программирование
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