Menu
Coddy logo textTech

Récapitulatif - Processeur de paiement

Fait partie de la section Programmation Orientée Objet du Journey Dart de Coddy — leçon 62 sur 110.

challenge icon

Défi

Facile

Construisons un système de traitement des paiements qui démontre la puissance du polymorphisme ! Vous allez créer une classe de méthode de paiement abstraite et plusieurs implémentations concrètes, puis traiter une collection de différents types de paiement via une interface unifiée.

Vous organiserez votre code en deux fichiers :

  • payments.dart : Définissez votre hiérarchie de paiement ici :
    • Une classe abstraite PaymentMethod avec une propriété String accountHolder, un constructeur et une méthode abstraite processPayment(double amount)
    • Une classe CreditCard qui étend PaymentMethod avec une propriété supplémentaire String cardNumber (les 4 derniers chiffres uniquement). Sa méthode processPayment doit afficher Processing $[amount] via Credit Card ****[cardNumber] for [accountHolder]
    • Une classe PayPal qui étend PaymentMethod avec une propriété supplémentaire String email. Sa méthode processPayment doit afficher Processing $[amount] via PayPal ([email]) for [accountHolder]
    • Une classe BankTransfer qui étend PaymentMethod avec une propriété supplémentaire String bankName. Sa méthode processPayment doit afficher Processing $[amount] via Bank Transfer from [bankName] for [accountHolder]
    Créez également une fonction processAllPayments(List<PaymentMethod> methods, double amount) qui :
    • Affiche Processing [count] payments of $[amount] each: où count est le nombre de méthodes de paiement
    • Parcourt chaque méthode de paiement et appelle processPayment(amount)
    • Après avoir traité tous les paiements, compte combien sont de type CreditCard en utilisant l'opérateur is et affiche Credit card payments: [count]
  • main.dart : Importez votre fichier de paiements et faites une démonstration du processeur de paiement :
    • Créez une List<PaymentMethod> contenant :
      • Une CreditCard pour 'Alice Smith' avec le numéro de carte '1234'
      • Un PayPal pour 'Bob Jones' avec l'email 'bob@email.com'
      • Un BankTransfer pour 'Carol White' avec la banque 'National Bank'
      • Une CreditCard pour 'David Brown' avec le numéro de carte '5678'
    • Appelez processAllPayments avec cette liste et le montant 99.99

Remarquez comment la fonction processAllPayments fonctionne avec le type abstrait PaymentMethod, pourtant chaque paiement est traité selon son implémentation spécifique. La vérification de type à la fin démontre comment vous pouvez toujours identifier des types spécifiques si nécessaire.

Sortie attendue :

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: 2

Essayez vous-même

import 'payments.dart';

void main() {
  // TODO: Créer une List<PaymentMethod> contenant :
  // - CreditCard pour 'Alice Smith' avec le numéro de carte '1234'
  // - PayPal pour 'Bob Jones' avec l'email 'bob@email.com'
  // - BankTransfer pour 'Carol White' avec la banque 'National Bank'
  // - CreditCard pour 'David Brown' avec le numéro de carte '5678'
  
  // TODO: Appeler processAllPayments avec la liste et le montant 99.99
}

Toutes les leçons de Programmation Orientée Objet