Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

ملخص - معالج الدفع

جزء من قسم Object Oriented Programming في رحلة Dart على Coddy — الدرس 62 من 110.

challenge icon

التحدي

سهل

لنقم ببناء نظام معالجة مدفوعات يوضح قوة تعدد الأشكال (polymorphism)! ستقوم بإنشاء فئة مجردة (abstract class) لطريقة الدفع وعدة تطبيقات ملموسة (concrete implementations)، ثم معالجة مجموعة من أنواع الدفع المختلفة من خلال واجهة موحدة.

ستقوم بتنظيم الكود الخاص بك في ملفين:

  • payments.dart: حدد التسلسل الهرمي للمدفوعات هنا:
    • فئة مجردة PaymentMethod تحتوي على خاصية String accountHolder، ومنشئ (constructor)، ودالة مجردة processPayment(double amount)
    • فئة CreditCard ترث من PaymentMethod مع خاصية إضافية String cardNumber (آخر 4 أرقام فقط). يجب أن تطبع دالة processPayment الخاصة بها: Processing $[amount] via Credit Card ****[cardNumber] for [accountHolder]
    • فئة PayPal ترث من PaymentMethod مع خاصية إضافية String email. يجب أن تطبع دالة processPayment الخاصة بها: Processing $[amount] via PayPal ([email]) for [accountHolder]
    • فئة BankTransfer ترث من PaymentMethod مع خاصية إضافية String bankName. يجب أن تطبع دالة processPayment الخاصة بها: Processing $[amount] via Bank Transfer from [bankName] for [accountHolder]
    قم أيضًا بإنشاء دالة processAllPayments(List<PaymentMethod> methods, double amount) تقوم بما يلي:
    • طباعة Processing [count] payments of $[amount] each: حيث count هو عدد طرق الدفع
    • التكرار عبر كل طريقة دفع واستدعاء processPayment(amount)
    • بعد معالجة جميع المدفوعات، قم بعدّ كم منها من نوع CreditCard باستخدام معامل is واطبع Credit card payments: [count]
  • main.dart: استورد ملف المدفوعات الخاص بك واستعرض معالج المدفوعات:
    • أنشئ List<PaymentMethod> تحتوي على:
      • CreditCard لـ 'Alice Smith' برقم بطاقة '1234'
      • PayPal لـ 'Bob Jones' ببريد إلكتروني 'bob@email.com'
      • BankTransfer لـ 'Carol White' ببنك 'National Bank'
      • CreditCard لـ 'David Brown' برقم بطاقة '5678'
    • استدعِ processAllPayments مع هذه القائمة والمبلغ 99.99

لاحظ كيف تعمل دالة processAllPayments مع النوع المجرد PaymentMethod، ومع ذلك تتم معالجة كل عملية دفع وفقًا لتطبيقها الخاص. يوضح التحقق من النوع في النهاية كيف لا يزال بإمكانك تحديد أنواع معينة عند الحاجة.

المخرجات المتوقعة:

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

جرّب بنفسك

import 'payments.dart';

void main() {
  // TODO: قم بإنشاء List<PaymentMethod> تحتوي على:
  // - CreditCard لـ 'Alice Smith' برقم البطاقة '1234'
  // - PayPal لـ 'Bob Jones' بالبريد الإلكتروني 'bob@email.com'
  // - BankTransfer لـ 'Carol White' ببنك 'National Bank'
  // - CreditCard لـ 'David Brown' برقم البطاقة '5678'
  
  // TODO: قم باستدعاء processAllPayments مع القائمة والمبلغ 99.99
}

جميع دروس Object Oriented Programming