Java консольное приложение, реализующее алгоритм ShellSort с использованием паттернов Builder, Strategy и Validator.
Пользователь может выбирать источник данных (файл, ручной ввод, случайная генерация), поле сортировки и управлять циклом программы.
- Освоить работу в команде с GitHub и pull request flow
- Реализовать собственный алгоритм сортировки (Shell Sort)
- Применить объектно-ориентированные принципы и паттерны проектирования
- Отработать процесс код-ревью и командного взаимодействия
- Builder — для создания объектов
Carс инвариантами - Strategy — для выбора стратегии сортировки (
ByModel,ByPower,ByYear) - Validator — для проверки входных данных до создания объекта (
team.shellsort.input.Validator) - Chain of Responsibility (опционально) — для поэтапной валидации ввода
shellsort-app/
├─ src/
│ ├─ main/
│ │ ├─ java/team/shellsort/
│ │ │ ├─ App.java // основной цикл и меню
│ │ │ ├─ model/Car.java // Builder, equals/hashCode, toString
│ │ │ ├─ input/ // ввод и валидация (Давид + Артём)
│ │ │ │ ├─ DataProvider.java
│ │ │ │ ├─ ConsoleDataProvider.java
│ │ │ │ ├─ FileDataProvider.java
│ │ │ │ ├─ RandomDataProvider.java
│ │ │ │ ├─ LineParser.java
│ │ │ │ ├─ LoadResult.java
│ │ │ │ └─ Validator.java
│ │ │ ├─ strategy/ // Иван
│ │ │ │ ├─ SortStrategy.java
│ │ │ │ ├─ ByModel.java
│ │ │ │ ├─ ByPower.java
│ │ │ │ └─ ByYear.java
│ │ │ ├─ sort/ // Дмитрий
│ │ │ │ └─ ShellSort.java
│ │ │ └─ utils/ // общий пакет для хелперов
│ │ │ ├─ FileLines.java
│ │ │ └─ Texts.java
│ └─ test/
│ └─ java/team/shellsort/sort/ShellSortTest.java
├─ build.gradle
├─ .gitignore
├─ LICENSE
└─ README.md
- JDK 21
Проверить:Должно отображатьjava -version
21.x - Git установлен
- Gradle устанавливать не нужно — используется встроенный Gradle Wrapper (8.14)
# 1. Клонирование проекта
git clone https://github.com/java-shellsort-team/shellsort-app.git
cd shellsort-app
# 2. Проверка Gradle Wrapper
./gradlew --version # (Windows: gradlew.bat --version)
# 3. Сборка и тестирование
./gradlew clean build # (Windows: gradlew.bat clean build)
# 4. Запуск приложения
./gradlew run # (Windows: gradlew.bat run)- Открыть проект: File → Open → выбрать корень репозитория
- Выбрать JDK 21:
- File → Project Structure → Project SDK = 21
- File → Settings → Build, Execution, Deployment → Gradle → Gradle JVM = 21
- Убедиться, что выбрано “Use Gradle from: Gradle Wrapper”
- Дождаться синхронизации Gradle
- Запуск: вкладка Gradle → Tasks →
application > run
java -versionне 21 → установить JDK 21 и выбрать в IDE- “command not found: gradlew” → дать права:
chmod +x gradlew
- IDEA не видит зависимости → File → Sync Project with Gradle Files
- Основная ветка:
main(защищена, merge только через PR) - Ветки участников:
feature/<имя>/<задача>
Примеры:feature/ivan/input-validation fix/evgeniy/sort-bug docs/mikhail/update-readme - Каждый PR требует ревью и апрув тимлида
- История
mainлинейная (squash merge)
Команда допускает коммиты на русском или английском языке — по выбору разработчика.
Главное — сохранять единообразный формат и лаконичность описания.
Формат:
<тип>: <краткое описание изменений>
Примеры:
feat: реализован алгоритм сортировки Шелла
fix: исправлена ошибка при валидации данных
docs: обновлено описание команды в README
Типы коммитов:
feat— новая функциональностьfix— исправление ошибокdocs— документацияrefactor— рефакторинг без изменения логикиtest— добавление или обновление тестовchore— служебные изменения (настройки, конфигурации, CI)
💡 Рекомендация: описания должны быть короткими (до 70 символов), отражать суть изменений и быть понятными любому члену команды.
Каждый участник создаёт отдельную ветку от main в формате:
feature/<имя>/<задача>
Перед созданием PR убедитесь, что:
- код компилируется без ошибок;
- внесённые изменения описаны в коммите;
- тесты (если есть) успешно проходят;
- нет лишних файлов (
.idea,target,buildи т.д.).
## Что сделано
- кратко опишите суть изменений;
- укажите, что именно реализовано или исправлено.
## Как проверить
- шаги для проверки изменений (если применимо).
## Дополнительно
- связанные задачи, обсуждения или комментарии.
Пример:
## Что сделано
Реализован класс Car с паттерном Builder и базовая валидация данных.
## Как проверить
1. Собрать проект
2. Запустить App.main()
3. Проверить создание объектов через Builder
## Дополнительно
Closes #5
💡 Совет:
- PR должен быть маленьким и понятным — не более 200–300 строк изменений.
- Каждый PR должен иметь понятный заголовок, например:
feat: реализован ввод данных из файла.
| Участник | Зона ответственности | GitHub |
|---|---|---|
| Михаил Латыпов | Тимлид, интеграция, консольное меню | @hodkonem |
| Евгений | Model + Builder | @gedfalkit |
| Иван Фирсов | Стратегии сортировки | @VaniaFirsov |
| Дмитрий | Алгоритм ShellSort | @faust0503 |
| Артём | Валидация данных | @ArtemFromPerm |
| Давид | Ввод данных | @gerodot-ai |
| Дата | Задача | Ответственный |
|---|---|---|
| до 5 ноября | Model + Builder | Евгений |
| до 6 ноября | Validator + интеграция | Артём |
| до 6 ноября | Стратегии сортировки | Иван |
| до 6 ноября | Алгоритм ShellSort | Дмитрий |
| до 7 ноября | Ввод данных | Давид |
| до 8 ноября | Интеграция + меню | Михаил |
| 9 ноября | Прогон и ревью | Команда |
| 10 ноября | Релиз v1.0 | Команда |
- Общие обсуждения — Telegram-группа команды
- Созвоны — понедельник и среда, 14:00 (МСК)
- Все изменения проходят через Pull Request и Code Review
- За инфраструктуру и merge отвечает тимлид
© 2025 Команда ShellSort Team.
Проект распространяется под лицензией MIT License.
- Репозиторий: github.com/java-shellsort-team/shellsort-app
- Канал общения: Telegram / Yandex Telemost (короткие синки)
- Ответственный за организацию: Михаил Латыпов (@hodkonem)
💬 Проект создан в рамках учебного интенсива Java-разработки. Цель — совместная реализация консольного приложения и отработка командного процесса разработки.