docs: add task specifications for project components
This commit is contained in:
@@ -0,0 +1,44 @@
|
|||||||
|
# Техническое задание: кастомный контейнер List
|
||||||
|
|
||||||
|
## Задача
|
||||||
|
|
||||||
|
Реализовать собственный контейнер для хранения объектов, не используя готовые реализации `List`, `ArrayList` и `LinkedList`.
|
||||||
|
|
||||||
|
## Требования
|
||||||
|
|
||||||
|
1. Создать интерфейс `MyList<T>`.
|
||||||
|
|
||||||
|
2. В интерфейсе определить основные операции:
|
||||||
|
|
||||||
|
- `add(...)`;
|
||||||
|
- `get(...)`;
|
||||||
|
- `set(...)`;
|
||||||
|
- `remove(...)`;
|
||||||
|
- `size()`;
|
||||||
|
- `isEmpty()`.
|
||||||
|
|
||||||
|
3. Создать класс `MyLinkedList<T>`, реализующий `MyList<T>`.
|
||||||
|
|
||||||
|
4. Реализовать контейнер на основе собственных узлов `Node<T>`.
|
||||||
|
|
||||||
|
5. Контейнер должен поддерживать:
|
||||||
|
|
||||||
|
- добавление элемента;
|
||||||
|
- получение элемента по индексу;
|
||||||
|
- замену элемента по индексу;
|
||||||
|
- удаление элемента по индексу;
|
||||||
|
- получение количества элементов;
|
||||||
|
- проверку на пустоту.
|
||||||
|
|
||||||
|
6. Обработать некорректные индексы с помощью исключений.
|
||||||
|
|
||||||
|
7. Контейнер не должен зависеть от класса `Student`, сортировки или пользовательского интерфейса.
|
||||||
|
|
||||||
|
## Результат
|
||||||
|
|
||||||
|
Должны быть реализованы:
|
||||||
|
|
||||||
|
```text
|
||||||
|
MyList.java
|
||||||
|
MyLinkedList.java
|
||||||
|
```
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
# Техническое задание: заполнение коллекции
|
||||||
|
|
||||||
|
## Задача
|
||||||
|
|
||||||
|
Реализовать разные способы заполнения `MyList<Student>` данными.
|
||||||
|
|
||||||
|
## Требования
|
||||||
|
|
||||||
|
1. Создать интерфейс `DataSource` с методом:
|
||||||
|
|
||||||
|
```text
|
||||||
|
fill(int size)
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Реализовать три способа заполнения:
|
||||||
|
|
||||||
|
- `ManualDataSource` — ручной ввод;
|
||||||
|
- `RandomDataSource` — случайная генерация;
|
||||||
|
- `FileDataSource` — чтение из файла.
|
||||||
|
|
||||||
|
3. Результатом работы каждого источника должна быть коллекция `MyList<Student>`.
|
||||||
|
|
||||||
|
4. Для создания объектов `Student` использовать `StudentBuilder`.
|
||||||
|
|
||||||
|
5. Все данные должны проходить валидацию средствами `Student`.
|
||||||
|
|
||||||
|
6. При ручном вводе некорректные данные не должны добавляться в коллекцию.
|
||||||
|
|
||||||
|
7. При чтении из файла некорректные строки должны обрабатываться без создания невалидных объектов `Student`.
|
||||||
|
|
||||||
|
8. Размер коллекции должен задаваться пользователем и соблюдаться при заполнении.
|
||||||
|
|
||||||
|
9. Не использовать стандартные коллекции `List`, `ArrayList`, `LinkedList` для хранения результата.
|
||||||
|
|
||||||
|
## Результат
|
||||||
|
|
||||||
|
```text
|
||||||
|
DataSource.java
|
||||||
|
ManualDataSource.java
|
||||||
|
RandomDataSource.java
|
||||||
|
FileDataSource.java
|
||||||
|
```
|
||||||
|
|
||||||
|
Классы не должны содержать логику сортировки или пользовательского меню.
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
# Техническое задание: сортировка
|
||||||
|
|
||||||
|
## Задача
|
||||||
|
|
||||||
|
Реализовать паттерн Strategy и собственный алгоритм сортировки объектов `Student`.
|
||||||
|
|
||||||
|
## Требования
|
||||||
|
|
||||||
|
1. Создать интерфейс `SortStrategy<T>` с методом:
|
||||||
|
|
||||||
|
```text
|
||||||
|
sort(MyList<T> list, Comparator<T> comparator)
|
||||||
|
```
|
||||||
|
|
||||||
|
1. Создать класс `BubbleSortStrategy<T>`, реализующий `SortStrategy<T>`.
|
||||||
|
|
||||||
|
2. Алгоритм сортировки реализовать самостоятельно. Готовые методы сортировки Java не использовать.
|
||||||
|
|
||||||
|
3. Сортировка должна работать с `MyList<T>`, а не со стандартными коллекциями Java.
|
||||||
|
|
||||||
|
4. Сортировка должна использовать переданный `Comparator<T>`.
|
||||||
|
|
||||||
|
5. Реализовать возможность сортировки `Student` по каждому из трёх полей:
|
||||||
|
|
||||||
|
- `groupNumber`;
|
||||||
|
- `averageGrade`;
|
||||||
|
- `recordBookNumber`.
|
||||||
|
|
||||||
|
6. Для каждого поля создать отдельный компаратор:
|
||||||
|
|
||||||
|
- `StudentGroupComparator`;
|
||||||
|
- `StudentAverageGradeComparator`;
|
||||||
|
- `StudentRecordBookComparator`.
|
||||||
|
|
||||||
|
7. Алгоритм сортировки не должен зависеть от класса `Student`.
|
||||||
|
|
||||||
|
## Результат
|
||||||
|
|
||||||
|
Должны быть реализованы:
|
||||||
|
|
||||||
|
```text
|
||||||
|
SortStrategy.java
|
||||||
|
BubbleSortStrategy.java
|
||||||
|
|
||||||
|
StudentGroupComparator.java
|
||||||
|
StudentAverageGradeComparator.java
|
||||||
|
StudentRecordBookComparator.java
|
||||||
|
```
|
||||||
|
|
||||||
|
Классы должны работать с `MyList` и не использовать готовые реализации сортировки.
|
||||||
@@ -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
|
||||||
|
```
|
||||||
|
|
||||||
|
Классы не должны зависеть от сортировки, коллекции, меню и ввода данных.
|
||||||
Reference in New Issue
Block a user