Кастомні методи — поєднуємо все разом

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

Alex Liu

Software Development Engineer

Інтеграція концепцій

  • Поєднайте та використайте:
    • Enum-и
    • Дата й час
    • Рекурсія
  • Мета: створювати зрозумілі, багаторазові й зручні для підтримки методи

  • Приклад програми:

    • Інтернет-магазин
      • з практичною системою OrderStatus і методами відстеження замовлень
      • з алгоритмом лояльної знижки.
Ввід/вивід і потоки в Java

Визначення Enum із методами

  • Визначте OrderStatus Enum для подання станів замовлення
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, date та current status.
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

Головний метод

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-метод виконується, коли створено нове замовлення з такою інформацією:
    • Користувач підписаний уже 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...