تحويل الأموال
جزء من قسم البرمجة كائنية التوجه في رحلة Lua على Coddy. الدرس 24 من 70.
التحدي
سهلمصرفك الرقمي أوشك على الاكتمال! الميزة الرئيسية الأخيرة هي القدرة على تحويل money بين الحسابات. هنا يتألق تصميمك الكائني حقًا: يمكن لكائن account أن يتفاعل مباشرةً مع كائن account آخر.
ستضيف method :transfer(targetAccount, amount) تنقل money من account إلى آخر. فكّر فيما تتضمنه هذه العملية فعليًا: إنها سحب من account المصدر يتبعه إيداع في account الهدف. والجميل هو أنه يمكنك إعادة استخدام methods التي أنشأتها بالفعل!
تابع البناء على ملفاتك الحالية:
Account.lua: أضف method:transfer(targetAccount, amount)إلى Account class. يجب أن تحاول هذه method سحب amount منself، وإذا كان ذلك successful، فأودع ذلك amount فيtargetAccount. إذا فشل السحب (بسبب عدم كفاية funds)، فلا ينبغي أن يحدث التحويل. حافظ على جميع وظائفك الحالية (constructor مع ID، وdeposit، وwithdraw، وgetBalance، و__tostring).main.lua: أنشئ عدة accounts ووضّح عمليات التحويل بينها، مع إظهار كيفية تغيّر الأرصدة عبر كائنات account المختلفة.
ستتلقى خمسة inputs:
- معرّف account الأول
- معرّف account الثاني
- الإيداع initial في account الأول
- مقدار التحويل الأول (من account 1 إلى account 2)
- مقدار التحويل الثاني (من account 1 إلى account 2)
في ملفك الرئيسي، أنشئ حسابين باستخدام IDs المعطاة (كلاهما يبدأان برصيد 0)، وأودع المبلغ initial في account الأول، ثم حاول إجراء عمليتي التحويل كلتيهما من account الأول إلى account الثاني. بعد كل محاولة تحويل، اطبع كلا الحسابين (ستعرض __tostring حالتهما current).
على سبيل المثال، إذا كانت inputs هي 101 و102 و500 و200 و400، فينبغي أن يكون الناتج:
Account [101]: Balance = 300
Account [102]: Balance = 200
Insufficient funds
Account [101]: Balance = 300
Account [102]: Balance = 200يبدأ account الأول بمبلغ 500 بعد الإيداع. ينجح التحويل الأول البالغ 200، فيترك account 101 برصيد 300 وaccount 102 برصيد 200. يفشل التحويل الثاني البالغ 400 لأن account 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: طباعة كلا الحسابين بعد التحويل الثاني
جميع دروس البرمجة كائنية التوجه
4مشروع: بنك رقمي
إعداد المشروعطريقة الإيداع7تعدد الأشكال وإعادة التعريف
إعادة تعريف الدوالاستدعاء دوال الفئة الأبDuck Typingواجهة مشتركةالتحقق من النوعمراجعة - أدوار الموظفين2نمط النموذج الأولي للفئات
مفهوم النموذج الأوليالربط باستخدام __indexالمنشئ :new()تهيئة الخصائصنسخ مستقلةملخص - مصنع السيارات5تحميل المعاملات في OOP
جمع الكائناتطرح الكائناتدمج الكائناتمقارنة الكائنات (<, >)مراجعة - رياضيات المحفظة8التغليف
اصطلاحات التسميةاستخدام Closures للخصوصيةالوصول عبر Closuresجداول للقراءة فقطمنطق التحقق من الصحةمراجعة - الخزنة الآمنة11أنماط التصميم (مبسط)
دوال المصنعجدول Singletonنمط الـ Iteratorالمراقب (المستمع)مراجعة - مصنع الـ Logger3حالة الكائن وسلوكه
متغيرات النسخةدالات الجلب (Getter Methods)دالات التعيين (Setter Methods)الخصائص المحسوبةتنسيق النصوصالتحقق من المساواةمراجعة - درجة الطالب6أساسيات الوراثة
إعداد الوراثةوراثة الـ Methodsتوسيع الـ Constructorإضافة Methods للابنالمشترك مقابل الفريدملخص - التسلسل الهرمي للأشكالتدرّب بنفسك: مترجم Lua عبر الإنترنت