مراجعة - نظام الدفع
جزء من قسم البرمجة كائنية التوجه في رحلة Java على Coddy. الدرس 40 من 87.
التحدي
سهللنَبْنِ نظامًا متكاملًا لمعالجة المدفوعات يجمع كل ما تعلمته عن interface في هذا الفصل. ستنشئ نظامًا مرنًا يمكن فيه معالجة طرق الدفع المختلفة بشكل موحّد من خلال interface مشتركة.
ستنظّم شيفرتك عبر خمسة ملفات:
Payable.java: عرّف interface الأساسية التي يجب أن ينفّذها جميع طرق الدفع. يجب أن تعلن عن method واحدة هيpay(double amount)تُرجع String يصف إجراء الدفع.CreditCard.java: أنشئ class تنفّذPayableوتمثّل مدفوعات بطاقات الائتمان. تحتوي CreditCard على field باسمcardNumberمن النوع String لتخزين آخر 4 أرقام. أضف constructor لتهيئته. يجب أن تُرجع methodpay:Paid [amount] using Credit Card ending in [cardNumber]PayPal.java: أنشئ class أخرى تنفّذPayableلمدفوعات PayPal. يحتوي حساب PayPal على field باسمemailمن النوع String. أضف constructor لتهيئته. يجب أن تُرجع methodpay:Paid [amount] via PayPal account [email]PaymentProcessor.java: أنشئ class للمعالجة يمكنها التعامل مع أي كائن من نوعPayable. يجب أن تحتوي على method باسمprocessPayment(Payable paymentMethod, double amount)تستدعي methodpayالخاصة بطريقة الدفع وتُرجع النتيجة. يوضّح هذا كيف تتيح interfaces السلوك متعدد الأشكال: لا يحتاج المعالج إلى معرفة نوع الدفع المحدد!Main.java: اجمع كل شيء معًا. ستتلقى ثلاث مدخلات: رقم بطاقة (آخر 4 أرقام)، وعنوان بريد إلكتروني، ومبلغ الدفع. أنشئPaymentProcessor، ثم استخدمه لمعالجة المدفوعات باستخدام كل من حسابCreditCardوحسابPayPalللمبلغ المحدد. اطبع كل نتيجة في سطر منفصل.
ستتلقى ثلاث مدخلات: آخر 4 أرقام من رقم البطاقة (String)، وبريد PayPal الإلكتروني (String)، ومبلغ الدفع (double).
نسّق المبالغ بمنزلتين عشريتين في مخرجاتك. لاحظ كيف يتعامل PaymentProcessor نفسه مع أنواع دفع مختلفة تمامًا بفضل قوة interfaces!
جرّب بنفسك
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// قراءة المدخلات
String cardNumber = scanner.nextLine(); // آخر 4 أرقام
String email = scanner.nextLine(); // بريد PayPal الإلكتروني
double amount = scanner.nextDouble(); // مبلغ الدفع
// TODO: إنشاء PaymentProcessor
// TODO: إنشاء CreditCard باستخدام cardNumber
// TODO: إنشاء حساب PayPal باستخدام email
// TODO: معالجة الدفع باستخدام CreditCard وطباعة النتيجة
// TODO: معالجة الدفع باستخدام PayPal وطباعة النتيجة
}
}
جميع دروس البرمجة كائنية التوجه
1أساسيات الـ OOP
الملفات الخارجيةمقدمة في الـ OOPالفئات (Classes) مقابل الكائنات (Objects)الكلمة المفتاحية thisالدوال (Methods)الحقول (Attributes)دالة البناء (Constructor)تعدد أشكال دالة البناء (Constructor Overloading)مراجعة - آلة حاسبة بسيطة4الوراثة
الوراثة الأساسية (extends)الكلمة المفتاحية superإعادة تعريف الدوال (@Override)تسلسل المنشئات (Constructor Chaining)كلاس Objectالوراثة الأحادية ومتعددة المستوياتلماذا لا توجد وراثة متعددة للكلاساتمراجعة - هيكلية الموظفين7الدوال الخاصة وفئة Object
دالة toString()equals() و hashCode()دالة clone()compareTo() و Comparableواجهة Comparatorمراجعة - الترتيب المخصص2محددات الوصول والتغليف
نظرة عامة على مستويات الوصولدوال Getter و Setterإخفاء البياناتالكلمة المفتاحية finalمراجعة - مدير الحساب البنكي5تعدد الأشكال (Polymorphism)
أساسيات الـ Method Overloadingالـ Method Overriding (في وقت التشغيل)الـ Upcasting والـ Downcastingمعامل الـ instanceofالفئات والدوال المجردة (Abstract)مراجعة - حاسبة الأشكال8مفاهيم OOP المتقدمة
الـ Composition مقابل الـ Inheritanceالـ Aggregation مقابل الـ Compositionالفئات الداخلية والمتداخلة والمجهولة (Inner, Nested & Anonymous)الـ Enums ودوالهاالـ Records (Java 16+)الـ Sealed Classes (Java 17+)11أنماط التصميم - الجزء الأول
مقدمة في أنماط التصميمنمط Singletonنمط Factoryنمط Builderنمط Observerنمط Strategy3خصائص الفئة والعضو الساكن
المتغيرات الخاصة بالكائن مقابل المتغيرات الساكنةالدوال الساكنةالكتل البرمجية الساكنةالثوابت (static final)ملخص - العداد والأدوات المساعدة6الواجهات (Interfaces) والأصناف المجردة (Abstract Classes)
مقدمة في الواجهات (Interfaces)تنفيذ الواجهات (Interfaces)تنفيذ واجهات متعددةالـ Default و Static في الواجهاتالأصناف المجردة مقابل الواجهاتالواجهات الوظيفية (Functional Interfaces)مراجعة - نظام الدفع9الأنواع العامة (Generics)
مقدمة في الأنواع العامةالأصناف العامة (Generic Classes)الدوال العامة (Generic Methods)معاملات الأنواع المقيدةالرموز البديلة (?, extends, super)مراجعة - الحاويات العامة12أنماط التصميم - الجزء الثاني
نمط الأمرنمط المحولنمط المزيننمط طريقة القالبنمط الحالةنمط التركيبنمط المكررتدرّب بنفسك: مترجم Java عبر الإنترنت