Podsumowanie — procesor płatności
Część sekcji Programowanie obiektowe ścieżki Dart w Coddy. Lekcja 62 z 110.
Wyzwanie
ŁatwyZbudujmy system przetwarzania płatności, który zademonstruje potęgę polimorfizmu! Utworzysz abstrakcyjną klasę metody płatności i kilka konkretnych implementacji, a następnie przetworzysz kolekcję różnych typów płatności za pomocą jednego interfejsu.
Podzielisz kod na dwa pliki:
payments.dart: Zdefiniuj tutaj hierarchię metod płatności:- Abstrakcyjna klasa
PaymentMethodz właściwościąString accountHolder, konstruktorem i metodą abstrakcyjnąprocessPayment(double amount) - Klasa
CreditCard, która rozszerzaPaymentMethodo dodatkową właściwośćString cardNumber(tylko 4 ostatnie cyfry). Jej metodaprocessPaymentpowinna wyświetlaćProcessing $[amount] via Credit Card ****[cardNumber] for [accountHolder] - Klasa
PayPal, która rozszerzaPaymentMethodo dodatkową właściwośćString email. Jej metodaprocessPaymentpowinna wyświetlaćProcessing $[amount] via PayPal ([email]) for [accountHolder] - Klasa
BankTransfer, która rozszerzaPaymentMethodo dodatkową właściwośćString bankName. Jej metodaprocessPaymentpowinna wyświetlaćProcessing $[amount] via Bank Transfer from [bankName] for [accountHolder]
processAllPayments(List<PaymentMethod> methods, double amount), która:- Wyświetla
Processing [count] payments of $[amount] each:, gdzie count to liczba metod płatności - Iteruje przez każdą metodę płatności i wywołuje
processPayment(amount) - Po przetworzeniu wszystkich płatności zlicza, ile z nich jest typu
CreditCard, używając operatorais, i wyświetlaCredit card payments: [count]
- Abstrakcyjna klasa
main.dart: Zaimportuj plik z metodami płatności i zaprezentuj procesor płatności:- Utwórz
List<PaymentMethod>zawierającą:CreditCarddla'Alice Smith'z numerem karty'1234'PayPaldla'Bob Jones'z adresem e-mail'bob@email.com'BankTransferdla'Carol White'z bankiem'National Bank'CreditCarddla'David Brown'z numerem karty'5678'
- Wywołaj
processAllPaymentsz tą listą i kwotą99.99
- Utwórz
Zwróć uwagę, że funkcja processAllPayments działa z abstrakcyjnym typem PaymentMethod, a mimo to każda płatność jest przetwarzana zgodnie z jej konkretną implementacją. Sprawdzanie typów na końcu pokazuje, że w razie potrzeby nadal możesz rozpoznawać konkretne typy.
Oczekiwany wynik:
Processing 4 payments of $99.99 each:
Processing $99.99 via Credit Card ****1234 for Alice Smith
Processing $99.99 via PayPal (bob@email.com) for Bob Jones
Processing $99.99 via Bank Transfer from National Bank for Carol White
Processing $99.99 via Credit Card ****5678 for David Brown
Credit card payments: 2Spróbuj swoich sił
import 'payments.dart';
void main() {
// TODO: Utwórz List<PaymentMethod> zawierającą:
// - CreditCard dla 'Alice Smith' z numerem karty '1234'
// - PayPal dla 'Bob Jones' z adresem e-mail 'bob@email.com'
// - BankTransfer dla 'Carol White' z bankiem 'National Bank'
// - CreditCard dla 'David Brown' z numerem karty '5678'
// TODO: Wywołaj processAllPayments z listą i kwotą 99.99
}
Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy OOP
Pliki zewnętrzneBiblioteki i importyWprowadzenie do OOPKlasy a obiektySłowo kluczowe thisMetodyZmienne instancjiPodstawy konstruktorówPowtórka – prosty kalkulator4Bezpieczeństwo wartości null
Wprowadzenie do bezpieczeństwa wartości nullTypy dopuszczające null i niedopuszczające nullOperatory ? i !Słowo kluczowe late a bezpieczeństwo wartości nullOperatory uwzględniające nullBezpieczeństwo wartości null w klasachPodsumowanie — system profili użytkowników7Klasy abstrakcyjne i interfejsy
Klasy abstrakcyjneMetody abstrakcyjneInterfejsy w DartInterfejsy niejawneImplementowanie a rozszerzanieWiele interfejsówPowtórka — kalkulator kształtów10Kolekcje i typy generyczne
Przegląd List, Set i MapKolekcje bezpieczne typowoKlasy generyczneMetody generyczneOgraniczenia typów generycznychIterable i IteratorPowtórka — generyczne przechowywanie danych13Zaawansowane koncepcje OOP
Kompozycja a dziedziczenieMetody rozszerzająceKlasy wywoływalneKlasy zapieczętowane (Dart 3)Rekordy (Dart 3)Wzorce i dopasowywanie (3.0)Typy wyliczeniowe z metodami16Projekt: Zarządzanie biblioteką
Omówienie projektuKlasy książek i użytkowników2Konstruktory w Dart
Konstruktor domyślnyKonstruktory nazwaneListy inicjalizująceKonstruktory stałeKonstruktory fabryczneKonstruktory przekierowującePodsumowanie — budowanie kształtów5Hermetyzacja
Elementy publiczne a prywatneKonwencja prefiksu _Prywatność na poziomie bibliotekiGettery i settery — szczegółowoUkrywanie informacjiPodsumowanie — dane uczniów8Domieszki
Wprowadzenie do domieszekTworzenie domieszekKorzystanie z wielu domieszekSłowo kluczowe on w domieszkachDomieszka a dziedziczenieDomieszka a interfejsPodsumowanie – system zwierząt11Metody specjalne
Nadpisanie toString()Nadpisanie hashCode i ==Interfejs ComparableMetoda call()Nadpisanie noSuchMethodPodsumowanie — własna kolekcja14Wzorce projektowe, część 1
Wprowadzenie do wzorców projektowychWzorzec SingletonWzorzec FactoryWzorzec ObserverWzorzec Strategy3Właściwości klas
Elementy instancji a elementy statycznePola final i constZmienne inicjalizowane z opóźnieniemMetody i pola statyczneGettery i setteryPowtórzenie – menedżer kont bankowych6Dziedziczenie
Podstawy dziedziczeniaSłowo kluczowe superPrzesłanianie metodAdnotacja @overrideSłowo kluczowe final dla klasKonstruktory i dziedziczeniePowtórzenie – hierarchia pracowników9Polimorfizm
Podstawy polimorfizmuPolimorfizm za pomocą interfejsówSprawdzanie typu w czasie działaniaOperatory is i asSłowo kluczowe covariantPodsumowanie — procesor płatnościPoćwicz samodzielnie: Kompilator Dart online