Skip to content

java-shellsort-team/shellsort-app

Repository files navigation

🧩 ShellSort App

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

🚀 Первый запуск проекта (CLI и IntelliJ IDEA)

✅ Требования

  • JDK 21
    Проверить:
    java -version
    Должно отображать 21.x
  • Git установлен
  • Gradle устанавливать не нужно — используется встроенный Gradle Wrapper (8.14)

⚙️ Быстрый старт (CLI)

# 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)

🧩 Запуск в IntelliJ IDEA

  1. Открыть проект: File → Open → выбрать корень репозитория
  2. Выбрать JDK 21:
  • File → Project Structure → Project SDK = 21
  • File → Settings → Build, Execution, Deployment → Gradle → Gradle JVM = 21
  • Убедиться, что выбрано “Use Gradle from: Gradle Wrapper”
  1. Дождаться синхронизации Gradle
  2. Запуск: вкладка Gradle → Tasks → application > run

🔎 Частые проблемы

  • java -version не 21 → установить JDK 21 и выбрать в IDE
  • “command not found: gradlew” → дать права:
    chmod +x gradlew
  • IDEA не видит зависимости → File → Sync Project with Gradle Files

🔄 Git Workflow

  • Основная ветка: 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 символов), отражать суть изменений и быть понятными любому члену команды.


🔄 Правила оформления Pull Request (PR)

Каждый участник создаёт отдельную ветку от main в формате:

feature/<имя>/<задача>

Перед созданием PR убедитесь, что:

  • код компилируется без ошибок;
  • внесённые изменения описаны в коммите;
  • тесты (если есть) успешно проходят;
  • нет лишних файлов (.idea, target, build и т.д.).

💬 Шаблон описания Pull Request

## Что сделано
- кратко опишите суть изменений;
- укажите, что именно реализовано или исправлено.

## Как проверить
- шаги для проверки изменений (если применимо).

## Дополнительно
- связанные задачи, обсуждения или комментарии.

Пример:

## Что сделано
Реализован класс 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

📅 План на спринт (1–10 ноября)

Дата Задача Ответственный
до 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-разработки. Цель — совместная реализация консольного приложения и отработка командного процесса разработки.

About

Java console app implementing ShellSort algorithm with Builder and Strategy patterns

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 5

Languages