Проект моделирует простую систему заказов, похожую на интернет-магазин:
- есть товары
- из товаров формируется заказ
- заказ может быть оплачен или отменён
- можно посчитать сумму заказа
- можно применить скидку
- есть функция, которая анализирует состояние заказа и возвращает человеко-читаемый текст
Отвечает за:
- хранение информации о товаре
Особенности:
- не содержит бизнес-логики
- 📌 Immutable объект (не изменяется после создания)
Отвечает за:
- описание всех возможных состояний заказа
- гарантию того, что других состояний быть не может
Особенности:
- 📌 реализован с помощью
sealed class
Отвечает за:
- описание способности считать стоимость
Особенности:
- 📌 любой класс с ценой может реализовать этот интерфейс
Отвечает за:
- хранение списка товаров
- управление статусом заказа
- основную бизнес-логику:
- добавление товаров
- удаление товаров
- оплата заказа
- отмена заказа
Использует:
- коллекции
- nullable-типы
- исключения
- наследование (через интерфейс)
- переопределение методов
Отвечает за:
- анализ текущего состояния заказа
- возврат человеко-читаемого текстового описания
Особенности:
- 📌 реализуется с помощью
when
Отвечает за:
- добавление логики скидок без изменения класса
Order
Используется:
- extension functions
- scoped functions
- lambda callbacks
Словесная схема связей:
Product ─┐ ├──> Order ────> OrderStatus Product ─┘ │ └── implements PriceCalculator
Order ──> processOrder(order): String Order ──> applyDiscount(...)
Для проверки задания используйте команду: ./gradlew verifyHomework