Metody niestandardowe – wszystko razem

Wejście/wyjście i strumienie w Javie

Alex Liu

Software Development Engineer

Integracja zagadnień

  • Łączymy i stosujemy:
    • Typy wyliczeniowe (Enum)
    • Datę i czas
    • Rekurencję
  • Cel: tworzenie czytelnych, wielokrotnego użytku i łatwych w utrzymaniu metod

  • Przykładowy program:

    • Sklep internetowy
      • z praktycznym systemem OrderStatus i metodami śledzenia zamówień
      • z algorytmem rabatu lojalnościowego
Wejście/wyjście i strumienie w Javie

Definiowanie Enum z metodami

  • Definiujemy Enum OrderStatus reprezentujący stany zamówienia
enum OrderStatus {
    PLACED("Order placed successfully"),
    DELIVERED("Order delivered");

private final String message; OrderStatus(String message) { this.message = message; } public String getMessage() { return message; } }
Wejście/wyjście i strumienie w Javie

Metoda niestandardowa dla operacji na datach

  • Używamy orderDate do szacowania daty dostawy zamówienia
    • Metoda .plusDays() dodaje dni do podanej daty
import java.time.LocalDate;

public class OrderUtils {
    public static LocalDate estimateDelivery(LocalDate orderDate, 
                                            int daysToDeliver) {
        return orderDate.plusDays(daysToDeliver);
    }
}
Wejście/wyjście i strumienie w Javie

Rekurencyjna metoda rabatu

  • Polityka nagród: rosnące rabaty miesięczne dla stałych klientów
    • Rekurencyjna metoda obliczania skumulowanego rabatu:
public class DiscountCalculator {
    public static double cumulativeDiscount(int months) {
        if (months <= 0) return 0;
        return 5 + cumulativeDiscount(months - 1); // $5 discount per month
    }
}
Wejście/wyjście i strumienie w Javie

Obiekt niestandardowy

  • Tworzymy klasę Order zawierającą wszystkie informacje o zamówieniu
    • Zawiera kluczowe dane: id, datę i bieżący status.
class Order {
    int orderId;
    OrderStatus orderStatus;
    LocalDate orderDate;

    Order(int orderId, LocalDate orderDate) {
        this.orderId = orderId;
        this.orderDate = orderDate;
        this.orderStatus = orderStatus;
    }
Wejście/wyjście i strumienie w Javie

Obiekt klienta z metodą toString()

  • Chcemy wyświetlić zamówienie w sposób czytelny dla pracownika
    • Definiujemy metodę toString(), która określa sposób wyświetlania obiektu Order.
public String toString() {
        return "Order[id=" + orderId + ", date=" + orderDate + "]";
    }
}
  • Przykładowe wyjście po wywołaniu .toString():
    Order[id=10015, date=2025-03-19]
    
Wejście/wyjście i strumienie w Javie

Metoda 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); } }
Wejście/wyjście i strumienie w Javie

Metoda main – wynik

  • Ta metoda main jest uruchamiana po złożeniu nowego zamówienia z następującymi danymi:
    • Użytkownik subskrybuje od 3 miesięcy
    • Szacowany czas dostawy: 7 dni
    • Początkowy status zamówienia: PLACED
Order[id=101, date=2025-03-09]
Estimated Delivery: 2025-03-16
Order placed successfully
Total Discount: $15.0
Wejście/wyjście i strumienie w Javie

Czas na ćwiczenia!

Wejście/wyjście i strumienie w Javie

Preparing Video For Download...