طريقة السحب
جزء من قسم البرمجة كائنية التوجه في رحلة Lua على Coddy. الدرس 21 من 70.
التحدي
سهلإن مصرفك الرقمي ينمو! يمكن لـ account الآن استقبال الإيداعات، لكن المصرف الحقيقي يحتاج أيضًا إلى السماح للعملاء بسحب الأموال. لنضف طريقة :withdraw(amount)، ولكن مع فحص أمان مهم.
على عكس الإيداعات، يمكن أن تفشل عمليات السحب. إذا حاول عميل سحب أموال أكثر مما لديه، فلا ينبغي للمصرف أن يسمح بذلك. يجب أن تتحقق طريقة withdraw من وجود أموال sufficient قبل خصم المبلغ.
ستتابع العمل باستخدام ملفيك:
Account.lua: أضف طريقة:withdraw(amount)إلى فئة Account الموجودة لديك. إذا كان لدى account رصيد كافٍ، فاطرح المبلغ وأعدtrue. إذا لم تكن هناك أموال كافية، فاطبعInsufficient fundsوأعدfalseمن دون تغيير balance.main.lua: أنشئ account، وأجرِ إيداعًا لمنحه بعض الأموال، ثم حاول إجراء عدة عمليات سحب لرؤية المعاملات الناجحة والفاشلة.
ستتلقى أربعة مدخلات:
- مبلغ الإيداع initial
- مبلغ السحب first
- مبلغ السحب second
- مبلغ السحب third
في ملفك الرئيسي، أنشئ account، وأودع المبلغ initial، ثم حاول إجراء كل عملية سحب بالترتيب. بعد كل محاولة سحب، اطبع balance الحالي في سطر جديد. تذكّر أن عمليات السحب الفاشلة ستطبع أيضًا Insufficient funds قبل أن تطبع balance.
على سبيل المثال، إذا كانت المدخلات هي 100 و30 و50 و40، فينبغي أن يكون الناتج:
70
20
Insufficient funds
20يبدأ account بقيمة 100 بعد الإيداع. تنجح عملية السحب first البالغة 30 (balance: 70)، وتنجح عملية السحب second البالغة 50 (balance: 20)، لكن عملية السحب third البالغة 40 تفشل لأنه لم يتبقَّ سوى 20، ولذلك يبقى balance عند 20.
جرّب بنفسك
-- استيراد وحدة Account
local Account = require('Account')
-- قراءة المدخلات الأربعة
local initialDeposit = tonumber(io.read())
local withdrawal1 = tonumber(io.read())
local withdrawal2 = tonumber(io.read())
local withdrawal3 = tonumber(io.read())
-- إنشاء حساب واحد
local account = Account:new()
-- إيداع المبلغ الأولي
account:deposit(initialDeposit)
-- محاولة السحب الأول وطباعة الرصيد
-- TODO: استدعاء account:withdraw(withdrawal1) هنا
print(account.balance)
-- محاولة السحب الثاني وطباعة الرصيد
-- TODO: استدعاء account:withdraw(withdrawal2) هنا
print(account.balance)
-- محاولة السحب الثالث وطباعة الرصيد
-- TODO: استدعاء account:withdraw(withdrawal3) هنا
print(account.balance)
جميع دروس البرمجة كائنية التوجه
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 عبر الإنترنت