Custom methods - Bringing it all together

Ввод/вывод и потоки в Java

Alex Liu

Software Development Engineer

Объединение концепций

  • Объединяем и используем:
    • Enum
    • Дата и время
    • Рекурсия
  • Цель: создавать понятные, переиспользуемые и поддерживаемые методы

  • Пример программы:

    • Сайт электронной торговли
      • с практической системой OrderStatus и методами отслеживания заказов
      • с алгоритмом скидок для постоянных клиентов.
Ввод/вывод и потоки в Java

Определение Enum с методами

  • Определяем Enum OrderStatus для представления состояний заказа
enum OrderStatus {
    PLACED("Order placed successfully"),
    DELIVERED("Order delivered");

private final String message; OrderStatus(String message) { this.message = message; } public String getMessage() { return message; } }
Ввод/вывод и потоки в Java

Пользовательский метод для работы с датами

  • Используем orderDate для оценки даты доставки
    • Метод .plusDays() добавляет дни к заданной дате
import java.time.LocalDate;

public class OrderUtils {
    public static LocalDate estimateDelivery(LocalDate orderDate, 
                                            int daysToDeliver) {
        return orderDate.plusDays(daysToDeliver);
    }
}
Ввод/вывод и потоки в Java

Рекурсивный метод для скидок

  • Политика вознаграждений: скидки увеличиваются каждый месяц, поощряя постоянных покупателей
    • Рекурсивный метод для расчёта накопленной скидки:
public class DiscountCalculator {
    public static double cumulativeDiscount(int months) {
        if (months <= 0) return 0;
        return 5 + cumulativeDiscount(months - 1); // $5 discount per month
    }
}
Ввод/вывод и потоки в Java

Пользовательский объект

  • Создаём класс Order, содержащий всю информацию о заказе
    • Хранит ключевые данные: id, дату и текущий статус.
class Order {
    int orderId;
    OrderStatus orderStatus;
    LocalDate orderDate;

    Order(int orderId, LocalDate orderDate) {
        this.orderId = orderId;
        this.orderDate = orderDate;
        this.orderStatus = orderStatus;
    }
Ввод/вывод и потоки в Java

Пользовательский объект с методом toString()

  • Хотим выводить заказ в удобном для сотрудника формате
    • Определяем метод toString(), задающий представление объекта Order при печати.
public String toString() {
        return "Order[id=" + orderId + ", date=" + orderDate + "]";
    }
}
  • Пример вывода при вызове .toString():
    Order[id=10015, date=2025-03-19]
    
Ввод/вывод и потоки в Java

Метод main

public class Main {
    public static void main(String[] args) {
        Order order = new Order(101, LocalDate.now());
        System.out.println(order.toString());

LocalDate delivery = OrderUtils.estimateDelivery(order.orderDate, 7); System.out.println("Estimated Delivery: " + delivery); System.out.println(OrderStatus.PLACED);
double discount = DiscountCalculator.cumulativeDiscount(3); System.out.println("Total Discount: $" + discount); } }
Ввод/вывод и потоки в Java

Метод main — вывод

  • Метод main выполняется при оформлении нового заказа со следующими данными:
    • Пользователь подписан уже 3 месяца
    • Предполагаемый срок доставки — 7 дней
    • Начальный статус заказа: PLACED
Order[id=101, date=2025-03-09]
Estimated Delivery: 2025-03-16
Order placed successfully
Total Discount: $15.0
Ввод/вывод и потоки в Java

Давайте потренируемся!

Ввод/вывод и потоки в Java

Preparing Video For Download...