Zusammenfassung – Payment Processor
Teil des Abschnitts Objektorientierte Programmierung der Dart-Journey von Coddy — Lektion 62 von 110.
Aufgabe
EinfachLassen Sie uns ein Zahlungssystem aufbauen, das die Stärke der Polymorphie demonstriert! Sie werden eine abstrakte Zahlungsmethoden-Klasse und mehrere konkrete Implementierungen erstellen und dann eine Sammlung verschiedener Zahlungstypen über eine einheitliche Schnittstelle verarbeiten.
Sie werden Ihren Code in zwei Dateien organisieren:
payments.dart: Definieren Sie hier Ihre Zahlungshierarchie:- Eine abstrakte Klasse
PaymentMethodmit einerString accountHolderEigenschaft, einem Konstruktor und einer abstrakten MethodeprocessPayment(double amount) - Eine
CreditCardKlasse, diePaymentMethoderweitert, mit einer zusätzlichenString cardNumberEigenschaft (nur die letzten 4 Ziffern). IhreprocessPaymentMethode sollteProcessing $[amount] via Credit Card ****[cardNumber] for [accountHolder]ausgeben - Eine
PayPalKlasse, diePaymentMethoderweitert, mit einer zusätzlichenString emailEigenschaft. IhreprocessPaymentMethode sollteProcessing $[amount] via PayPal ([email]) for [accountHolder]ausgeben - Eine
BankTransferKlasse, diePaymentMethoderweitert, mit einer zusätzlichenString bankNameEigenschaft. IhreprocessPaymentMethode sollteProcessing $[amount] via Bank Transfer from [bankName] for [accountHolder]ausgeben
processAllPayments(List<PaymentMethod> methods, double amount), die:Processing [count] payments of $[amount] each:ausgibt, wobei count die Anzahl der Zahlungsmethoden ist- Jede Zahlungsmethode durchläuft und
processPayment(amount)aufruft - Nach der Verarbeitung aller Zahlungen zählt, wie viele vom Typ
CreditCardsind (unter Verwendung desisOperators), undCredit card payments: [count]ausgibt
- Eine abstrakte Klasse
main.dart: Importieren Sie Ihre Zahlungsdatei und demonstrieren Sie den Zahlungsprozessor:- Erstellen Sie eine
List<PaymentMethod>, die Folgendes enthält:- Eine
CreditCardfür'Alice Smith'mit der Kartennummer'1234' - Ein
PayPalfür'Bob Jones'mit der E-Mail'bob@email.com' - Einen
BankTransferfür'Carol White'mit der Bank'National Bank' - Eine
CreditCardfür'David Brown'mit der Kartennummer'5678'
- Eine
- Rufen Sie
processAllPaymentsmit dieser Liste und dem Betrag99.99auf
- Erstellen Sie eine
Beachten Sie, wie die Funktion processAllPayments mit dem abstrakten Typ PaymentMethod arbeitet, obwohl jede Zahlung gemäß ihrer spezifischen Implementierung verarbeitet wird. Die Typprüfung am Ende zeigt, wie Sie bei Bedarf dennoch spezifische Typen identifizieren können.
Erwartete Ausgabe:
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: 2Probier es selbst
import 'payments.dart';
void main() {
// TODO: Erstelle eine List<PaymentMethod>, die Folgendes enthält:
// - CreditCard für 'Alice Smith' mit der Kartennummer '1234'
// - PayPal für 'Bob Jones' mit der E-Mail 'bob@email.com'
// - BankTransfer für 'Carol White' mit der Bank 'National Bank'
// - CreditCard für 'David Brown' mit der Kartennummer '5678'
// TODO: Rufe processAllPayments mit der Liste und dem Betrag 99.99 auf
}
Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der OOP
Externe DateienBibliotheken & ImportsEinführung in die OOPKlassen vs. ObjekteDas this-SchlüsselwortMethodenInstanzvariablenKonstruktor-GrundlagenWiederholung – Einfacher Taschenrechner4Null-Sicherheit
Einführung in Null-SicherheitNullable vs. Non-NullableDie ? und ! OperatorenLate-Schlüsselwort & Null-SicherheitNull-aware OperatorenNull-Sicherheit in KlassenZusammenfassung – Benutzerprofil-System7Abstrakte Klassen & Interfaces
Abstrakte KlassenAbstrakte MethodenInterfaces in DartImplizite InterfacesImplementieren vs. ErweiternMehrfache InterfacesRückblick – Shape Calculator10Collections & Generics
Überblick über List, Set und MapTypsichere CollectionsGenerische KlassenGenerische MethodenGenerische ConstraintsIterable & IteratorZusammenfassung – Generische Speicherung13Fortgeschrittene OOP-Konzepte
Komposition vs. VererbungExtension MethodsCallable ClassesSealed Classes (Dart 3)Records (Dart 3)Patterns & Matching (3.0)Enums mit Methoden16Projekt: Bibliotheksverwaltung
ProjektübersichtBuch- und Benutzerklassen2Konstruktoren in Dart
Standard-KonstruktorBenannte KonstruktorenInitialisierungslistenKonstante KonstruktorenFactory-KonstruktorenWeiterleitende KonstruktorenZusammenfassung – Shape Builder5Kapselung
Öffentliche vs. private MemberDie _ Präfix-KonventionSichtbarkeit auf Library-EbeneGetter & Setter im DetailInformation HidingRückblick – Schülerdatensätze8Mixins
Einführung in MixinsMixins erstellenMehrere Mixins verwendenDas on-Schlüsselwort in MixinsMixin vs. VererbungMixin vs. InterfaceZusammenfassung - Tiersystem11Spezielle Methoden
toString() überschreibenhashCode & == überschreibenComparable-Interfacecall()-MethodenoSuchMethod überschreibenZusammenfassung – Eigene Collection14Entwurfsmuster Teil 1
Einführung in EntwurfsmusterSingleton-MusterFactory-MusterObserver-MusterStrategy-Muster3Klasseneigenschaften
Instanz- vs. statische MemberFinal & Const FelderLate-VariablenStatische Methoden & FelderGetter und SetterZusammenfassung – Bankkonto-Manager6Vererbung
Grundlagen der VererbungDas super-SchlüsselwortMethoden überschreibenDie @override-AnnotationDas final-Klassen-SchlüsselwortKonstruktoren & VererbungRückblick – Mitarbeiter-Hierarchie9Polymorphismus
Polymorphismus-GrundlagenPolymorphismus über InterfacesTypprüfung zur LaufzeitDie is & as OperatorenDas covariant SchlüsselwortZusammenfassung – Payment Processor