Podsumowanie — system płatności
Część sekcji Programowanie obiektowe ścieżki Java w Coddy. Lekcja 40 z 87.
Wyzwanie
ŁatwyZbudujmy kompletny system przetwarzania płatności, który łączy wszystko, czego nauczyłeś się o interfejsach w tym rozdziale. Stworzysz elastyczny system, w którym różne metody płatności można obsługiwać w jednolity sposób za pomocą wspólnego interfejsu.
Rozmieścisz kod w pięciu plikach:
Payable.java: Zdefiniuj główny interfejs, który muszą implementować wszystkie metody płatności. Powinien deklarować jedną metodępay(double amount), która zwraca String opisujący operację płatności.CreditCard.java: Utwórz klasę implementującąPayable, która reprezentuje płatności kartą kredytową. Obiekt CreditCard ma polecardNumber(String) przechowujące 4 ostatnie cyfry. Dodaj konstruktor, który je inicjalizuje. Metodapaypowinna zwracać:Paid [amount] using Credit Card ending in [cardNumber]PayPal.java: Utwórz kolejną klasę implementującąPayable, przeznaczoną do płatności przez PayPal. Konto PayPal ma poleemail(String). Dodaj konstruktor, który je inicjalizuje. Metodapaypowinna zwracać:Paid [amount] via PayPal account [email]PaymentProcessor.java: Utwórz klasę procesora, która może obsługiwać dowolny obiektPayable. Powinna mieć metodęprocessPayment(Payable paymentMethod, double amount), która wywołuje metodępaymetody płatności i zwraca wynik. To pokazuje, jak interfejsy umożliwiają zachowanie polimorficzne: procesor nie musi znać konkretnego rodzaju płatności!Main.java: Połącz wszystkie elementy. Otrzymasz trzy dane wejściowe: numer karty (4 ostatnie cyfry), adres e-mail i kwotę płatności. Utwórz obiektPaymentProcessor, a następnie użyj go do przetworzenia płatności podaną kwotą zarówno za pomocą obiektuCreditCard, jak i kontaPayPal. Wypisz każdy wynik w osobnym wierszu.
Otrzymasz trzy dane wejściowe: 4 ostatnie cyfry numeru karty (String), adres e-mail PayPal (String) i kwotę płatności (double).
Formatuj kwoty w wyniku, używając dwóch miejsc po przecinku. Zwróć uwagę, jak ten sam obiekt PaymentProcessor obsługuje zupełnie różne rodzaje płatności dzięki możliwościom interfejsów!
Spróbuj swoich sił
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Wczytaj dane wejściowe
String cardNumber = scanner.nextLine(); // Ostatnie 4 cyfry
String email = scanner.nextLine(); // Adres e-mail PayPal
double amount = scanner.nextDouble(); // Kwota płatności
// TODO: Utwórz obiekt PaymentProcessor
// TODO: Utwórz obiekt CreditCard z cardNumber
// TODO: Utwórz konto PayPal z email
// TODO: Przetwórz płatność za pomocą CreditCard i wypisz wynik
// TODO: Przetwórz płatność za pomocą PayPal i wypisz wynik
}
}
Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy programowania obiektowego
Pliki zewnętrzneWprowadzenie do programowania obiektowegoKlasy a obiektySłowo kluczowe thisMetodyPola (atrybuty)Metoda konstruktoraPrzeciążanie konstruktoraPodsumowanie — prosty kalkulator4Dziedziczenie
Podstawy dziedziczenia (extends)Słowo kluczowe superPrzesłanianie metod (@Override)Łańcuch wywołań konstruktorówKlasa ObjectDziedziczenie jedno- i wielopoziomoweDlaczego Java nie obsługuje wielodziedziczenia klasPodsumowanie – hierarchia pracowników7Metody specjalne i klasa Object
Metoda toString()equals() i hashCode()Metoda clone()compareTo() i ComparableInterfejs ComparatorPodsumowanie — własne sortowanie10Obsługa wyjątków w programowaniu obiektowym
Hierarchia klas wyjątkówWłasne wyjątkiBłędy sprawdzane a niesprawdzaneWzorzec try-with-resourcesPodsumowanie – zweryfikowany użytkownik2Modyfikatory dostępu i enkapsulacja
Przegląd poziomów dostępuMetody pobierające i ustawiająceUkrywanie informacjiSłowo kluczowe finalPodsumowanie — menedżer kont bankowych5Polimorfizm
Podstawy przeciążania metodPrzesłanianie metod (w czasie wykonywania)Rzutowanie w górę i w dółOperator instanceofKlasy i metody abstrakcyjnePowtórka — kalkulator figur8Zaawansowane koncepcje OOP
Kompozycja a dziedziczenieAgregacja a kompozycjaKlasy wewnętrzne, zagnieżdżone i anonimoweEnumy i metody enumówRekordy (Java 16+)Klasy zapieczętowane (Java 17+)11Wzorce projektowe — część 1
Wprowadzenie do wzorców projektowychWzorzec SingletonWzorzec FactoryWzorzec BuilderWzorzec ObserverWzorzec Strategy3Właściwości klas i składowe statyczne
Zmienne instancji a zmienne statyczneMetody statyczneBloki statyczneStałe (static final)Powtórka – Counter i Utility6Interfejsy i klasy abstrakcyjne
Wprowadzenie do interfejsówImplementowanie interfejsówImplementacja wielu interfejsówMetody domyślne i statyczne w interfejsieKlasy abstrakcyjne a interfejsyInterfejsy funkcyjnePodsumowanie — system płatnościPoćwicz samodzielnie: Kompilator Java online