Menu
Coddy logo textTech

Riepilogo - Elaboratore di pagamenti

Fa parte della sezione Programmazione orientata agli oggetti del percorso Dart di Coddy. Lezione 62 di 110.

challenge icon

Sfida

Facile

Costruiamo un sistema di elaborazione dei pagamenti che dimostri la potenza del polimorfismo! Creerai una classe astratta per i metodi di pagamento e diverse implementazioni concrete, poi elaborerai una raccolta di tipi di pagamento diversi tramite un'interfaccia unificata.

Organizzerai il codice in due file:

  • payments.dart: definisci qui la gerarchia dei metodi di pagamento:
    • Una classe astratta PaymentMethod con una proprietà String accountHolder, un costruttore e un metodo astratto processPayment(double amount)
    • Una classe CreditCard che estende PaymentMethod con una proprietà aggiuntiva String cardNumber (solo le ultime 4 cifre). Il suo metodo processPayment dovrebbe stampare Processing $[amount] via Credit Card ****[cardNumber] for [accountHolder]
    • Una classe PayPal che estende PaymentMethod con una proprietà aggiuntiva String email. Il suo metodo processPayment dovrebbe stampare Processing $[amount] via PayPal ([email]) for [accountHolder]
    • Una classe BankTransfer che estende PaymentMethod con una proprietà aggiuntiva String bankName. Il suo metodo processPayment dovrebbe stampare Processing $[amount] via Bank Transfer from [bankName] for [accountHolder]
    Crea anche una funzione processAllPayments(List<PaymentMethod> methods, double amount) che:
    • Stampi Processing [count] payments of $[amount] each: dove count è il numero di metodi di pagamento
    • Iteri su ogni metodo di pagamento e chiami processPayment(amount)
    • Dopo aver elaborato tutti i pagamenti, conti quanti sono di tipo CreditCard usando l'operatore is e stampi Credit card payments: [count]
  • main.dart: importa il file dei pagamenti e mostra il funzionamento del sistema di elaborazione dei pagamenti:
    • Crea una List<PaymentMethod> contenente:
      • Una CreditCard per 'Alice Smith' con numero di carta '1234'
      • Una PayPal per 'Bob Jones' con email 'bob@email.com'
      • Una BankTransfer per 'Carol White' con banca 'National Bank'
      • Una CreditCard per 'David Brown' con numero di carta '5678'
    • Chiama processAllPayments con questa lista e l'importo 99.99

Nota come la funzione processAllPayments lavori con il tipo astratto PaymentMethod, mentre ogni pagamento viene elaborato secondo la propria implementazione specifica. Il controllo dei tipi alla fine mostra come sia comunque possibile identificare tipi specifici quando necessario.

Output previsto:

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

Provalo tu

import 'payments.dart';

void main() {
  // TODO: Crea una List<PaymentMethod> contenente:
  // - CreditCard per 'Alice Smith' con numero di carta '1234'
  // - PayPal per 'Bob Jones' con indirizzo email 'bob@email.com'
  // - BankTransfer per 'Carol White' con banca 'National Bank'
  // - CreditCard per 'David Brown' con numero di carta '5678'
  
  // TODO: Chiama processAllPayments con la lista e l'importo 99.99
}

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore Dart online