diff --git a/docs/tasks/CustomList.md b/docs/tasks/CustomList.md new file mode 100644 index 0000000..e95066e --- /dev/null +++ b/docs/tasks/CustomList.md @@ -0,0 +1,44 @@ +# Техническое задание: кастомный контейнер List + +## Задача + +Реализовать собственный контейнер для хранения объектов, не используя готовые реализации `List`, `ArrayList` и `LinkedList`. + +## Требования + +1. Создать интерфейс `MyList`. + +2. В интерфейсе определить основные операции: + + - `add(...)`; + - `get(...)`; + - `set(...)`; + - `remove(...)`; + - `size()`; + - `isEmpty()`. + +3. Создать класс `MyLinkedList`, реализующий `MyList`. + +4. Реализовать контейнер на основе собственных узлов `Node`. + +5. Контейнер должен поддерживать: + + - добавление элемента; + - получение элемента по индексу; + - замену элемента по индексу; + - удаление элемента по индексу; + - получение количества элементов; + - проверку на пустоту. + +6. Обработать некорректные индексы с помощью исключений. + +7. Контейнер не должен зависеть от класса `Student`, сортировки или пользовательского интерфейса. + +## Результат + +Должны быть реализованы: + +```text +MyList.java +MyLinkedList.java +``` diff --git a/docs/tasks/DataSource.md b/docs/tasks/DataSource.md new file mode 100644 index 0000000..3c42760 --- /dev/null +++ b/docs/tasks/DataSource.md @@ -0,0 +1,44 @@ +# Техническое задание: заполнение коллекции + +## Задача + +Реализовать разные способы заполнения `MyList` данными. + +## Требования + +1. Создать интерфейс `DataSource` с методом: + +```text +fill(int size) +``` + +2. Реализовать три способа заполнения: + + - `ManualDataSource` — ручной ввод; + - `RandomDataSource` — случайная генерация; + - `FileDataSource` — чтение из файла. + +3. Результатом работы каждого источника должна быть коллекция `MyList`. + +4. Для создания объектов `Student` использовать `StudentBuilder`. + +5. Все данные должны проходить валидацию средствами `Student`. + +6. При ручном вводе некорректные данные не должны добавляться в коллекцию. + +7. При чтении из файла некорректные строки должны обрабатываться без создания невалидных объектов `Student`. + +8. Размер коллекции должен задаваться пользователем и соблюдаться при заполнении. + +9. Не использовать стандартные коллекции `List`, `ArrayList`, `LinkedList` для хранения результата. + +## Результат + +```text +DataSource.java +ManualDataSource.java +RandomDataSource.java +FileDataSource.java +``` + +Классы не должны содержать логику сортировки или пользовательского меню. diff --git a/docs/tasks/Sorting.md b/docs/tasks/Sorting.md new file mode 100644 index 0000000..65bbffa --- /dev/null +++ b/docs/tasks/Sorting.md @@ -0,0 +1,50 @@ +# Техническое задание: сортировка + +## Задача + +Реализовать паттерн Strategy и собственный алгоритм сортировки объектов `Student`. + +## Требования + +1. Создать интерфейс `SortStrategy` с методом: + +```text +sort(MyList list, Comparator comparator) +``` + +1. Создать класс `BubbleSortStrategy`, реализующий `SortStrategy`. + +2. Алгоритм сортировки реализовать самостоятельно. Готовые методы сортировки Java не использовать. + +3. Сортировка должна работать с `MyList`, а не со стандартными коллекциями Java. + +4. Сортировка должна использовать переданный `Comparator`. + +5. Реализовать возможность сортировки `Student` по каждому из трёх полей: + + - `groupNumber`; + - `averageGrade`; + - `recordBookNumber`. + +6. Для каждого поля создать отдельный компаратор: + + - `StudentGroupComparator`; + - `StudentAverageGradeComparator`; + - `StudentRecordBookComparator`. + +7. Алгоритм сортировки не должен зависеть от класса `Student`. + +## Результат + +Должны быть реализованы: + +```text +SortStrategy.java +BubbleSortStrategy.java + +StudentGroupComparator.java +StudentAverageGradeComparator.java +StudentRecordBookComparator.java +``` + +Классы должны работать с `MyList` и не использовать готовые реализации сортировки. diff --git a/docs/tasks/Student.md b/docs/tasks/Student.md new file mode 100644 index 0000000..2e17172 --- /dev/null +++ b/docs/tasks/Student.md @@ -0,0 +1,46 @@ +# Техническое задание: класс `Student` + +## Задача + +Реализовать класс `Student` как единственную точку проверки корректности данных. Объект класса `Student` не может быть создан с некорректными данными. + +## Требования + +1. Класс `Student` содержит три поля: + + - `groupNumber`; + - `averageGrade`; + - `recordBookNumber`. + +2. Все поля должны быть `private` и неизменяемыми после создания объекта. + +3. Проверка корректности данных должна находиться в классе `Student`. + +4. Реализовать класс `StudentBuilder` для создания объектов `Student`. + +5. В `StudentBuilder` реализовать методы: + + - `setGroupNumber(...)`; + - `setAverageGrade(...)`; + - `setRecordBookNumber(...)`; + - `build()`. + +6. Метод `build()` должен создавать только корректный объект `Student`. При некорректных данных должно выбрасываться исключение. + +7. Реализовать для `Student`: + + - методы получения значений полей; + - `toString()`; + - `equals()`; + - `hashCode()`. + +## Результат + +Должны быть реализованы два независимых класса: + +```text +Student.java +StudentBuilder.java +``` + +Классы не должны зависеть от сортировки, коллекции, меню и ввода данных.