Zusammenfassung – Zahlungsprozessor
Teil des Abschnitts Objektorientierte Programmierung der Dart-Journey von Coddy. Lektion 62 von 110.
Aufgabe
EinfachErstellen wir ein Zahlungsabwicklungssystem, das die Leistungsfähigkeit des Polymorphismus demonstriert! Du erstellst eine abstrakte Klasse für Zahlungsmethoden und mehrere konkrete Implementierungen und verarbeitest anschließend eine Sammlung verschiedener Zahlungstypen über eine einheitliche Schnittstelle.
Du organisierst deinen Code in zwei Dateien:
payments.dart: Definiere hier deine Zahlungshierarchie:- Eine abstrakte Klasse
PaymentMethodmit einer EigenschaftString accountHolder, einem Konstruktor und einer abstrakten MethodeprocessPayment(double amount) - Eine Klasse
CreditCard, diePaymentMethodmit einer zusätzlichen EigenschaftString cardNumber(nur die letzten 4 Ziffern) erweitert. Ihre MethodeprocessPaymentsollProcessing $[amount] via Credit Card ****[cardNumber] for [accountHolder]ausgeben - Eine Klasse
PayPal, diePaymentMethodmit einer zusätzlichen EigenschaftString emailerweitert. Ihre MethodeprocessPaymentsollProcessing $[amount] via PayPal ([email]) for [accountHolder]ausgeben - Eine Klasse
BankTransfer, diePaymentMethodmit einer zusätzlichen EigenschaftString bankNameerweitert. Ihre MethodeprocessPaymentsollProcessing $[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 der Anzahl der Zahlungsmethoden entspricht- jede Zahlungsmethode durchläuft und
processPayment(amount)aufruft - nach der Verarbeitung aller Zahlungen zählt, wie viele vom Typ
CreditCardsind, indem sie den Operatorisverwendet, undCredit card payments: [count]ausgibt
- Eine abstrakte Klasse
main.dart: Importiere deine Zahlungsdatei und führe den Zahlungsprozessor vor:- Erstelle eine
List<PaymentMethod>, die Folgendes enthält:- Eine
CreditCardfür'Alice Smith'mit der Kartennummer'1234' - Eine
PayPalfür'Bob Jones'mit der E-Mail-Adresse'bob@email.com' - Eine
BankTransferfür'Carol White'mit der Bank'National Bank' - Eine
CreditCardfür'David Brown'mit der Kartennummer'5678'
- Eine
- Rufe
processAllPaymentsmit dieser Liste und dem Betrag99.99auf
- Erstelle eine
Beachte, wie die Funktion processAllPayments mit dem abstrakten Typ PaymentMethod arbeitet, während jede Zahlung gemäß ihrer spezifischen Implementierung verarbeitet wird. Die Typprüfung am Ende zeigt, wie du bei Bedarf weiterhin bestimmte Typen identifizieren kannst.
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 Schlüsselwort thisMethodenInstanzvariablenGrundlagen von KonstruktorenRückblick – Einfacher Taschenrechner4Null-Sicherheit
Einführung in die Null-SicherheitNullable vs. Non-NullableDie Operatoren ? und !Late-Schlüsselwort und Null-SicherheitNull-bewusste OperatorenNull-Sicherheit in KlassenRückblick – Benutzers профilsystem7Abstrakte Klassen & Interfaces
Abstrakte KlassenAbstrakte MethodenInterfaces in DartImplizite InterfacesImplementieren vs. ErweiternMehrere InterfacesZusammenfassung – Formrechner10Collections & Generics
Übersicht über List, Set und MapTypsichere CollectionsGenerische KlassenGenerische MethodenGenerische EinschränkungenIterable & IteratorRückblick – Generischer Speicher13Fortgeschrittene OOP-Konzepte
Komposition vs. VererbungErweiterungsmethodenAufrufbare KlassenVersiegelte Klassen (Dart 3)Records (Dart 3)Muster & Matching (3.0)Enums mit Methoden16Projekt: Bibliotheksverwaltung
ProjektübersichtBuch- und Benutzerklassen2Konstruktoren in Dart
StandardkonstruktorBenannte KonstruktorenInitialisierungslistenKonstantenkonstruktorenFactory-KonstruktorenWeiterleitende KonstruktorenRückblick – Shape Builder5Kapselung
Öffentliche vs. private MemberDie _-Präfix-KonventionBibliotheksweite SichtbarkeitTiefergehende Getter & SetterInformationsverbergungRückblick – Studierendendaten8Mixins
Einführung in MixinsMixins erstellenMehrere Mixins verwendenDas Schlüsselwort „on“ in MixinsMixin vs. VererbungMixin vs. SchnittstelleRückblick – Tiersystem11Spezielle Methoden
toString()-ÜberschreibunghashCode- & ==-ÜberschreibungComparable-Schnittstellecall()-MethodenoSuchMethod-ÜberschreibungWiederholung – Benutzerdefinierte Collection14Entwurfsmuster Teil 1
Einführung in EntwurfsmusterSingleton-MusterFabrikmusterBeobachtermusterStrategiemuster17Abschließende Herausforderungen
E-Learning-PlattformBankingsystemSpielcharaktersystemFahrzeugvermietung3Klassen-Eigenschaften
Instanz- vs. statische MemberFinal- und Const-FelderLate-VariablenStatische Methoden und FelderGetter und SetterRückblick – Bankkontoverwaltung6Vererbung
Grundlegende VererbungDas Schlüsselwort superMethodenüberschreibungDie Annotation @overrideDas Schlüsselwort final für KlassenKonstruktoren und VererbungZusammenfassung – Mitarbeiterhierarchie9Polymorphismus
Grundlagen des PolymorphismusPolymorphismus über InterfacesLaufzeit-TypüberprüfungDie Operatoren is & asCovariant-SchlüsselwortZusammenfassung – ZahlungsprozessorÜbe selbstständig: Online-Dart-Compiler