Giter Site home page Giter Site logo

java-sprint2-hw's Introduction

java-sprint2-hw

Second sprint homework #ТЗ: «Трекер задач». #Типы задач Простейшим кирпичиком такой системы является задача (англ. task). У задачи есть следующие свойства:

Название, кратко описывающее суть задачи (например, «Переезд»). Описание, в котором раскрываются детали. Уникальный идентификационный номер задачи, по которому её можно будет найти. Статус, отображающий её прогресс. Мы будем выделять следующие этапы жизни задачи: NEW — задача только создана, но к её выполнению ещё не приступили. IN_PROGRESS — над задачей ведётся работа. DONE — задача выполнена. Иногда для выполнения какой-нибудь масштабной задачи её лучше разбить на подзадачи (англ. subtask). Большую задачу, которая делится на подзадачи, мы будем называть эпиком (англ. epic). Таким образом, в нашей системе задачи могут быть трёх типов: обычные задачи, эпики и подзадачи. Для них должны выполняться следующие условия:

Для каждой подзадачи известно, в рамках какого эпика она выполняется. Каждый эпик знает, какие подзадачи в него входят. Завершение всех подзадач эпика считается завершением эпика. Менеджер Кроме классов для описания задач, вам нужно реализовать класс для объекта-менеджера. Он будет запускаться на старте программы и управлять всеми задачами. В нём должны быть реализованы следующие функции:

Возможность хранить задачи всех типов. Для этого вам нужно выбрать подходящую коллекцию. Методы: Получение списка всех задач. Получение списка всех эпиков. Получение списка всех подзадач определённого эпика. Получение задачи любого типа по идентификатору. Добавление новой задачи, эпика и подзадачи. Сам объект должен передаваться в качестве параметра. Обновление задачи любого типа по идентификатору. Новая версия объекта передаётся в виде параметра. Удаление ранее добавленных задач — всех и по идентификатору. Управление статусами осуществляется по следующему правилу: Менеджер сам не выбирает статус для задачи. Информация о нём приходит менеджеру вместе с информацией о самой задаче. Для эпиков: если у эпика нет подзадач или все они имеют статус NEW, то статус должен быть NEW. если все подзадачи имеют статус DONE, то и эпик считается завершённым — со статусом DONE. во всех остальных случаях статус должен быть IN_PROGRESS. Менеджер теперь интерфейс Класс TaskManager должен стать интерфейсом. В нём нужно собрать список методов, которые должны быть у любого объекта-менеджера. Вспомогательные методы, если вы их создавали, переносить в интерфейс не нужно. Созданный ранее класс менеджера нужно переименовать в InMemoryTasksManager. Именно то, что менеджер хранит всю информацию в оперативной памяти, и есть его главное свойство, позволяющее эффективно управлять задачами. Внутри класса должна остаться реализация методов. При этом важно не забыть имплементировать TaskManager — в Java класс должен явно заявить, что он подходит под требования интерфейса. История просмотров задач Добавьте в программу новую функциональность — нужно, чтобы трекер отображал последние просмотренные пользователем задачи. Для этого реализуйте метод history() — он должен возвращать последние 10 просмотренных задач. Просмотром будем считаться вызов у менеджера методов getSubtask() или getEpic(). От повторных просмотров избавляться не нужно.

У метода history() не будет параметров. Это значит, он формирует свой ответ, анализируя исключительно внутреннее состояние полей объекта менеджера. Подумайте, каким образом и какие данные вы запишите в поля менеджера для возможности извлекать из них историю посещений. Так как в истории отображается, к каким задачам было обращение в методах getSubtask() и getEpic(), эти данные в полях менеджера будут обновляться при вызове этих двух методов.

Обратите внимание, что просмотрены могут быть как подзадача, так и эпик. То есть возвращаемый список задач может содержать объект одного из этих двух типов на любой своей позиции. Чтобы описать ячейку такого списка, нужно вспомнить о полиморфизме и выбрать тип, являющийся общим родителем обоих классов.

Утилитарный класс Чтобы использование программы стало более удобным, создайте утилитарный класс Managers. Вся ответственность за создание менеджера задач теперь будет лежать на этом классе: он будет сам подбирать нужную реализацию и возвращать объект правильного типа. У Managers будет единственные метод getDefault(). При этом вызывающему неизвестен конкретный класс, только то, что объект, который возвращает getDefault(), точно менеджер, то есть реализует интерфейс TaskManager.

Статусы задач как перечисление Так как варианты возможных статусов у задачи ограничены, для их хранения в программе лучше завести перечисляемый тип enum.

Тестирование вашего решения Убедитесь, что ваше решение работает! В главном классе воспроизведите несложный пользовательский сценарий: создайте задачи разного типа, вызовите разные методы и посмотрите, что получилось. Если код рабочий, история просмотров задач будет отображаться корректно. Не удаляйте такой проверочный код: в реальных проектах от него, конечно, избавляются, но с ним ревьюеру будет гораздо проще прочитать ваш проект и разобраться, что именно вы сделали и как.

java-sprint2-hw's People

Contributors

andrewsukhov avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.