تحويل الأموال
جزء من قسم Object Oriented Programming في رحلة Lua على Coddy — الدرس 24 من 70.
التحدي
سهلأصبح بنكك الرقمي مكتملاً تقريبًا! الميزة الرئيسية الأخيرة هي القدرة على تحويل الأموال بين الحسابات. هذا هو المكان الذي يتألق فيه تصميمك الموجه للكائنات (object-oriented design) حقًا — حيث يمكن لكائن حساب واحد التفاعل مباشرة مع كائن حساب آخر.
ستقوم بإضافة تابع :transfer(targetAccount, amount) يقوم بنقل الأموال من حساب إلى آخر. فكر في ما تنطوي عليه هذه العملية حقًا: إنها عملية سحب من الحساب المصدر تليها عملية إيداع في الحساب المستهدف. الجمال في الأمر هو أنه يمكنك إعادة استخدام التوابع التي قمت ببنائها بالفعل!
استمر في البناء على ملفاتك الحالية:
Account.lua: أضف تابع:transfer(targetAccount, amount)إلى فئة Account الخاصة بك. يجب أن يحاول هذا التابع سحب المبلغ منself، وإذا نجح، يقوم بإيداع هذا المبلغ فيtargetAccount. إذا فشلت عملية السحب (بسبب عدم كفاية الأموال)، يجب ألا يتم التحويل. احتفظ بجميع وظائفك الحالية (المنشئ مع المعرف ID، و deposit، و withdraw، و getBalance، و __tostring).main.lua: قم بإنشاء حسابات متعددة واستعرض عمليات التحويل بينها، موضحًا كيف تتغير الأرصدة عبر كائنات الحساب المختلفة.
ستتلقى خمسة مدخلات:
- معرف الحساب الأول
- معرف الحساب الثاني
- الإيداع الأولي في الحساب الأول
- مبلغ التحويل الأول (من الحساب 1 إلى الحساب 2)
- مبلغ التحويل الثاني (من الحساب 1 إلى الحساب 2)
في ملفك الرئيسي، قم بإنشاء حسابين بالمعرفات المعطاة (كلاهما يبدأ برصيد 0)، وأودع المبلغ الأولي في الحساب الأول، ثم حاول إجراء عمليتي التحويل من الحساب الأول إلى الثاني. بعد كل محاولة تحويل، اطبع كلا الحسابين (سيعرض __tostring حالتهما الحالية).
على سبيل المثال، إذا كانت المدخلات هي 101، 102، 500، 200، و 400، يجب أن يكون المخرج:
Account [101]: Balance = 300
Account [102]: Balance = 200
Insufficient funds
Account [101]: Balance = 300
Account [102]: Balance = 200يبدأ الحساب الأول بمبلغ 500 بعد الإيداع. ينجح التحويل الأول بقيمة 200، مما يترك الحساب 101 برصيد 300 والحساب 102 برصيد 200. يفشل التحويل الثاني بقيمة 400 لأن الحساب 101 لديه 300 فقط — لذا يظل كلا الرصيدين دون تغيير.
جرّب بنفسك
-- استدعاء وحدة الحساب (Account)
local Account = require('Account')
-- قراءة المدخلات الخمسة
local id1 = io.read()
local id2 = io.read()
local initialDeposit = tonumber(io.read())
local transfer1 = tonumber(io.read())
local transfer2 = tonumber(io.read())
-- إنشاء حسابين باستخدام المعرفات
local account1 = Account:new(id1)
local account2 = Account:new(id2)
-- إيداع المبلغ الأولي في الحساب الأول
account1:deposit(initialDeposit)
-- TODO: محاولة إجراء التحويل الأول من account1 إلى account2
-- TODO: طباعة كلا الحسابين بعد التحويل الأول
-- TODO: محاولة إجراء التحويل الثاني من account1 إلى account2
-- TODO: طباعة كلا الحسابين بعد التحويل الثاني
جميع دروس 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 للابنالمشترك مقابل الفريدملخص - التسلسل الهرمي للأشكال