Menu
Coddy logo textTech

Resumen - Procesador de pagos

Parte de la sección Programación Orientada a Objetos del Journey de Dart de Coddy — lección 62 de 110.

challenge icon

Desafío

Fácil

¡Vamos a construir un sistema de procesamiento de pagos que demuestre el poder del polimorfismo! Crearás una clase abstracta de método de pago y varias implementaciones concretas, luego procesarás una colección de diferentes tipos de pago a través de una interfaz unificada.

Organizarás tu código en dos archivos:

  • payments.dart: Define tu jerarquía de pagos aquí:
    • Una clase abstracta PaymentMethod con una propiedad String accountHolder, un constructor y un método abstracto processPayment(double amount)
    • Una clase CreditCard que extiende PaymentMethod con una propiedad adicional String cardNumber (solo los últimos 4 dígitos). Su processPayment debe imprimir Processing $[amount] via Credit Card ****[cardNumber] for [accountHolder]
    • Una clase PayPal que extiende PaymentMethod con una propiedad adicional String email. Su processPayment debe imprimir Processing $[amount] via PayPal ([email]) for [accountHolder]
    • Una clase BankTransfer que extiende PaymentMethod con una propiedad adicional String bankName. Su processPayment debe imprimir Processing $[amount] via Bank Transfer from [bankName] for [accountHolder]
    También crea una función processAllPayments(List<PaymentMethod> methods, double amount) que:
    • Imprima Processing [count] payments of $[amount] each: donde count es el número de métodos de pago
    • Itere a través de cada método de pago y llame a processPayment(amount)
    • Después de procesar todos los pagos, cuente cuántos son de tipo CreditCard usando el operador is e imprima Credit card payments: [count]
  • main.dart: Importa tu archivo de pagos y demuestra el procesador de pagos:
    • Crea una List<PaymentMethod> que contenga:
      • Un CreditCard para 'Alice Smith' con el número de tarjeta '1234'
      • Un PayPal para 'Bob Jones' con el correo electrónico 'bob@email.com'
      • Un BankTransfer para 'Carol White' con el banco 'National Bank'
      • Un CreditCard para 'David Brown' con el número de tarjeta '5678'
    • Llama a processAllPayments con esta lista y el monto 99.99

Observa cómo la función processAllPayments trabaja con el tipo abstracto PaymentMethod, sin embargo, cada pago se procesa de acuerdo con su implementación específica. La comprobación de tipos al final demuestra cómo todavía puedes identificar tipos específicos cuando sea necesario.

Salida esperada:

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

Pruébalo tú mismo

import 'payments.dart';

void main() {
  // TODO: Crear una List<PaymentMethod> que contenga:
  // - CreditCard para 'Alice Smith' con número de tarjeta '1234'
  // - PayPal para 'Bob Jones' con correo electrónico 'bob@email.com'
  // - BankTransfer para 'Carol White' con banco 'National Bank'
  // - CreditCard para 'David Brown' con número de tarjeta '5678'
  
  // TODO: Llamar a processAllPayments con la lista y el monto 99.99
}

Todas las lecciones de Programación Orientada a Objetos