Как человек обычно делает покупки? Если ему нужен не один продукт, а несколько, то очень вероятно, что сначала он составит список, чтобы ничего не забыть. Сделать это можно где угодно: на листе бумаги, в приложении для заметок или, например, в сообщении самому себе в мессенджере.
А теперь представьте, что это список не продуктов, а полноценных дел. И не каких-нибудь простых вроде «помыть посуду» или «позвонить бабушке», а сложных — например, «организовать большой семейный праздник» или «купить квартиру». Каждая из таких задач может разбиваться на несколько этапов со своими нюансами и сроками. А если над их выполнением будет работать не один человек, а целая команда, то организация процесса станет ещё сложнее.
Как системы контроля версий помогают команде работать с общим кодом, так и трекеры задач позволяют эффективно организовать совместную работу над задачами. Вам предстоит написать бэкенд для такого трекера. В итоге должна получиться программа, отвечающая за формирование модели данных для этой страницы:
💡Пользователь не будет видеть консоль вашего приложения. Поэтому нужно сделать так, чтобы методы не просто печатали что-то в консоль, но и возвращали объекты нужных типов.
Вы можете добавить консольный вывод для самопроверки в класcе Main
, но на работу методов он влиять не должен.
Простейший кирпичик трекера — задача (англ. task). У неё есть следующие свойства:
enum
:
NEW
— задача только создана, но к её выполнению ещё не приступили.IN_PROGRESS
— над задачей ведётся работа.DONE
— задача выполнена.Иногда для выполнения какой-нибудь масштабной задачи её лучше разбить на подзадачи (англ. subtask). Большая задача, которая делится на подзадачи, называется эпиком (англ. epic).
Подытожим. В системе задачи могут быть трёх типов: обычные задачи, эпики и подзадачи. Для них должны выполняться следующие условия:
В трекере у каждого типа задач есть идентификатор. Это целое число, уникальное для всех типов задач. По нему находят, обновляют, удаляют задачи. При создании задачи менеджер присваивает ей новый идентификатор.
Также советуем применить знания о методах equals()
и hashCode()
, чтобы реализовать идентификацию задачи по её id
. При этом две задачи с одинаковым id
должны выглядеть для менеджера как одна и та же.
💡 Эти методы нежелательно переопределять в наследниках. Ваша задача — подумать, почему.
Кроме классов для описания задач, вам нужно реализовать класс для объекта-менеджера. Он будет запускаться на старте программы и управлять всеми задачами. В нём должны быть реализованы следующие функции:
NEW
, то статус должен быть NEW
.DONE
, то и эпик считается завершённым — со статусом DONE
.IN_PROGRESS
.Main
метод static void main(String[] args)
и внутри него:
System.out.println(..)
.Интересного вам программирования!