Menu
Coddy logo textTech

Recapitulação - Processador de Pagamentos

Parte da seção Programação Orientada a Objetos do Journey de Dart da Coddy — lição 62 de 110.

challenge icon

Desafio

Fácil

Vamos construir um sistema de processamento de pagamentos que demonstra o poder do polimorfismo! Você criará uma classe abstrata de método de pagamento e várias implementações concretas, depois processará uma coleção de diferentes tipos de pagamento por meio de uma interface unificada.

Você organizará seu código em dois arquivos:

  • payments.dart: Defina sua hierarquia de pagamentos aqui:
    • Uma classe abstrata PaymentMethod com uma propriedade String accountHolder, um construtor e um método abstrato processPayment(double amount)
    • Uma classe CreditCard que estende PaymentMethod com uma propriedade adicional String cardNumber (apenas os últimos 4 dígitos). Seu processPayment deve imprimir Processing $[amount] via Credit Card ****[cardNumber] for [accountHolder]
    • Uma classe PayPal que estende PaymentMethod com uma propriedade adicional String email. Seu processPayment deve imprimir Processing $[amount] via PayPal ([email]) for [accountHolder]
    • Uma classe BankTransfer que estende PaymentMethod com uma propriedade adicional String bankName. Seu processPayment deve imprimir Processing $[amount] via Bank Transfer from [bankName] for [accountHolder]
    Crie também uma função processAllPayments(List<PaymentMethod> methods, double amount) que:
    • Imprima Processing [count] payments of $[amount] each: onde count é o número de métodos de pagamento
    • Itere por cada método de pagamento e chame processPayment(amount)
    • Após processar todos os pagamentos, conte quantos são do tipo CreditCard usando o operador is e imprima Credit card payments: [count]
  • main.dart: Importe seu arquivo de pagamentos e demonstre o processador de pagamentos:
    • Crie uma List<PaymentMethod> contendo:
      • Um CreditCard para 'Alice Smith' com o número do cartão '1234'
      • Um PayPal para 'Bob Jones' com o e-mail 'bob@email.com'
      • Um BankTransfer para 'Carol White' com o banco 'National Bank'
      • Um CreditCard para 'David Brown' com o número do cartão '5678'
    • Chame processAllPayments com esta lista e o valor 99.99

Observe como a função processAllPayments funciona com o tipo abstrato PaymentMethod, mas cada pagamento é processado de acordo com sua implementação específica. A verificação de tipo no final demonstra como você ainda pode identificar tipos específicos quando necessário.

Saída 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

Experimente você mesmo

import 'payments.dart';

void main() {
  // TODO: Crie uma List<PaymentMethod> contendo:
  // - CreditCard para 'Alice Smith' com o número do cartão '1234'
  // - PayPal para 'Bob Jones' com o e-mail 'bob@email.com'
  // - BankTransfer para 'Carol White' com o banco 'National Bank'
  // - CreditCard para 'David Brown' com o número do cartão '5678'
  
  // TODO: Chame processAllPayments com a lista e o valor 99.99
}

Todas as lições de Programação Orientada a Objetos