اختبار البنك النهائي
جزء من قسم Object Oriented Programming في رحلة Lua على Coddy — الدرس 25 من 70.
التحدي
سهلتهانينا على بناء نظام بنك رقمي متكامل! فئة Account الخاصة بك الآن تتعامل مع الإيداعات، السحوبات، التحقق من الرصيد، تعريف الحساب، والتحويلات بين الحسابات. دعنا نضع كل ذلك قيد الاختبار من خلال سيناريو مصرفي واقعي متعدد الحسابات.
في هذا التحدي النهائي، ستقوم بمحاكاة بنك صغير يضم ثلاثة عملاء يجرون معاملات متنوعة. سيتحقق هذا من أن جميع أساليبك (methods) تعمل معاً بشكل صحيح وأن الحسابات تحافظ حقاً على حالة مستقلة.
ملفاك هما:
Account.lua: فئة Account الكاملة الخاصة بك مع جميع الوظائف التي قمت ببنائها طوال هذا المشروع (المُنشئ مع المعرف ID، و deposit، و withdraw، و getBalance، و __tostring، و transfer).main.lua: نص محاكاة (script) يقوم بإنشاء حسابات متعددة وتشغيل سلسلة من المعاملات بينها.
ستتلقى ستة مدخلات:
- معرف الحساب 1 (Account 1 ID)
- معرف الحساب 2 (Account 2 ID)
- معرف الحساب 3 (Account 3 ID)
- الإيداع الأولي للحساب 1
- الإيداع الأولي للحساب 2
- الإيداع الأولي للحساب 3
في ملفك الرئيسي، قم بمحاكاة اليوم المصرفي التالي:
- أنشئ ثلاثة حسابات بالمعرفات المعطاة
- أودع المبالغ الأولية في كل حساب على حدة
- الحساب 1 يحول 100 إلى الحساب 2
- الحساب 2 يحول 150 إلى الحساب 3
- الحساب 3 يحول 50 إلى الحساب 1
- الحساب 1 يحاول تحويل 1000 إلى الحساب 3 (يجب أن يفشل هذا)
- اطبع الحسابات الثلاثة بالترتيب (الحساب 1، ثم 2، ثم 3)
على سبيل المثال، إذا كانت المدخلات هي A001، A002، A003، 500، 300، و 200، يجب أن يكون المخرج:
Insufficient funds
Account [A001]: Balance = 450
Account [A002]: Balance = 250
Account [A003]: Balance = 300دعنا نتتبع العملية: يبدأ الحساب 1 بـ 500، يحول 100 إلى الحساب 2 (يصبح 400)، ثم يتلقى 50 من الحساب 3 (يصبح 450). يبدأ الحساب 2 بـ 300، يتلقى 100 (يصبح 400)، يحول 150 إلى الحساب 3 (يصبح 250). يبدأ الحساب 3 بـ 200، يتلقى 150 (يصبح 350)، يحول 50 إلى الحساب 1 (يصبح 300). التحويل الأخير بقيمة 1000 يفشل لأن الحساب 1 لديه 450 فقط.
جرّب بنفسك
-- استدعاء وحدة الحساب (Account)
local Account = require('Account')
-- قراءة المدخلات الستة
local id1 = io.read()
local id2 = io.read()
local id3 = io.read()
local initialDeposit1 = tonumber(io.read())
local initialDeposit2 = tonumber(io.read())
local initialDeposit3 = tonumber(io.read())
-- إنشاء ثلاثة حسابات باستخدام المعرفات
-- TODO: create account1, account2, account3 using Account:new()
-- إيداع المبالغ الأولية في كل حساب خاص بها
-- TODO: deposit initialDeposit1 into account1, initialDeposit2 into account2, initialDeposit3 into account3
-- الحساب 1 يحول 100 إلى الحساب 2
-- TODO: account1:transfer(account2, 100)
-- الحساب 2 يحول 150 إلى الحساب 3
-- TODO: account2:transfer(account3, 150)
-- الحساب 3 يحول 50 إلى الحساب 1
-- TODO: account3:transfer(account1, 50)
-- الحساب 1 يحاول تحويل 1000 إلى الحساب 3 (يجب أن يفشل هذا)
-- TODO: account1:transfer(account3, 1000)
-- طباعة الحسابات الثلاثة بالترتيب
-- TODO: print account1, account2, account3
جميع دروس Object Oriented Programming
4مشروع: بنك رقمي
إعداد المشروعطريقة الإيداع7تعدد الأشكال وإعادة التعريف
إعادة تعريف الدوالاستدعاء دوال الفئة الأبDuck Typingواجهة مشتركةالتحقق من النوعمراجعة - أدوار الموظفين2نمط النموذج الأولي للفئات
مفهوم النموذج الأوليالربط باستخدام __indexالمنشئ :new()تهيئة الخصائصنسخ مستقلةملخص - مصنع السيارات5تحميل المعاملات في OOP
جمع الكائناتطرح الكائناتدمج الكائناتمقارنة الكائنات (<, >)مراجعة - رياضيات المحفظة8التغليف
اصطلاحات التسميةاستخدام Closures للخصوصيةالوصول عبر Closuresجداول للقراءة فقطمنطق التحقق من الصحةمراجعة - الخزنة الآمنة11أنماط التصميم (مبسط)
دوال المصنعجدول Singletonنمط الـ Iteratorالمراقب (المستمع)مراجعة - مصنع الـ Logger3حالة الكائن وسلوكه
متغيرات النسخةدالات الجلب (Getter Methods)دالات التعيين (Setter Methods)الخصائص المحسوبةتنسيق النصوصالتحقق من المساواةمراجعة - درجة الطالب6أساسيات الوراثة
إعداد الوراثةوراثة الـ Methodsتوسيع الـ Constructorإضافة Methods للابنالمشترك مقابل الفريدملخص - التسلسل الهرمي للأشكال