الحصول على الرصيد
جزء من قسم Object Oriented Programming في رحلة Lua على Coddy — الدرس 22 من 70.
التحدي
سهلبدأ بنكك الرقمي يتشكل بالفعل! يمكن للحسابات الآن استقبال الإيداعات ومعالجة السحوبات مع التحقق المناسب من الأموال. الآن، دعنا نضيف طريقة جلب (getter method) لاسترداد الرصيد، ثم نجمع كل شيء معاً في سيناريو بنكي واقعي.
ستستمر في البناء على ملفاتك الحالية:
Account.lua: أضف طريقة:getBalance()التي تعيد الرصيد الحالي. يتبع هذا نمط الجلب (getter pattern) الذي تعلمته سابقاً—مما يوفر وصولاً متحكماً فيه للبيانات الداخلية بدلاً من الوصول إلى الحقل مباشرة. احتفظ بجميع وظائفك الحالية (المنشئ، وطرق الإيداع والسحب).main.lua: أنشئ حساباً وقم بتشغيل سلسلة من العمليات المصرفية لتوضيح كيفية عمل الإيداعات والسحوبات وفحوصات الرصيد معاً في سيناريو حقيقي.
ستتلقى خمسة مدخلات:
- مبلغ الإيداع الأولي
- مبلغ السحب الأول
- مبلغ الإيداع الثاني
- مبلغ السحب الثاني
- مبلغ السحب الثالث
في ملفك الرئيسي، أنشئ حساباً وقم بإجراء هذه العمليات بالترتيب:
- أودع المبلغ الأولي، ثم اطبع الرصيد باستخدام
:getBalance() - اسحب المبلغ الأول، ثم اطبع الرصيد
- أودع المبلغ الثاني، ثم اطبع الرصيد
- اسحب المبلغ الثاني، ثم اطبع الرصيد
- حاول إجراء السحب الثالث، ثم اطبع الرصيد
تذكر أن عمليات السحب الفاشلة ستطبع Insufficient funds قبل أن تطبع الرصيد.
على سبيل المثال، إذا كانت المدخلات هي 200، و 50، و 100، و 180، و 100، يجب أن يكون المخرج:
200
150
250
70
Insufficient funds
70يبدأ الحساب عند 200، وينخفض إلى 150 بعد السحب الأول، ويرتفع إلى 250 بعد إيداع آخر، وينخفض إلى 70 بعد سحب 180، ويبقى عند 70 عندما يفشل السحب النهائي بقيمة 100 بسبب نقص الأموال.
جرّب بنفسك
-- استدعاء وحدة الحساب (Account)
local Account = require('Account')
-- قراءة المدخلات الخمسة
local initialDeposit = tonumber(io.read())
local withdrawal1 = tonumber(io.read())
local deposit2 = tonumber(io.read())
local withdrawal2 = tonumber(io.read())
local withdrawal3 = tonumber(io.read())
-- إنشاء حساب واحد
local account = Account:new()
-- إيداع المبلغ الأولي وطباعة الرصيد باستخدام :getBalance()
account:deposit(initialDeposit)
print(account:getBalance())
-- محاولة السحب الأولى وطباعة الرصيد
account:withdraw(withdrawal1)
print(account:getBalance())
-- إيداع المبلغ الثاني وطباعة الرصيد
account:deposit(deposit2)
print(account:getBalance())
-- محاولة السحب الثانية وطباعة الرصيد
account:withdraw(withdrawal2)
print(account:getBalance())
-- محاولة السحب الثالثة وطباعة الرصيد
account:withdraw(withdrawal3)
print(account:getBalance())
جميع دروس 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 للابنالمشترك مقابل الفريدملخص - التسلسل الهرمي للأشكال