העברת כספים
חלק מהיחידה תכנות מונחה עצמים במסלול ה-Lua של Coddy. שיעור 24 מתוך 70.
אתגר
קלהבנק הדיגיטלי שלך כמעט מוכן! התכונה המרכזית האחרונה היא היכולת להעביר כסף בין חשבונות. כאן העיצוב מונחה העצמים שלך באמת מצטיין: אובייקט של חשבון אחד יכול לתקשר ישירות עם אובייקט של חשבון אחר.
תוסיף מתודת :transfer(targetAccount, amount) שמעבירה כסף מחשבון אחד לאחר. חשוב מה הפעולה הזאת כוללת בפועל: משיכת כסף מחשבון המקור ולאחריה הפקדה בחשבון היעד. היתרון הוא שאפשר להשתמש מחדש במתודות שכבר יצרת!
המשך לעבוד על הקבצים הקיימים שלך:
Account.lua: הוסף מתודת:transfer(targetAccount, amount)למחלקה Account שלך. המתודה צריכה לנסות למשוך את הסכום מ-self, ואם המשיכה מצליחה, להפקיד את הסכום הזה ב-targetAccount. אם המשיכה נכשלת (אין מספיק כסף), ההעברה לא אמורה להתבצע. שמור על כל הפונקציונליות הקיימת שלך (בנאי עם מזהה, הפקדה, משיכה, 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 באמצעות require
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פולימורפיזם ודריסת מתודות
דריסת מתודותקריאה למתודות של מחלקת האבטיפוסיות ברווזממשק משותףבדיקת טיפוססיכום – תפקידי עובדים2תבנית אב־טיפוס למחלקה
מושג אב־הטיפוסקישור באמצעות __indexהבנאי :new()אתחול מאפייניםמופעים עצמאייםסיכום – מפעל מכוניות5העמסת אופרטורים בתכנות מונחה עצמים
חיבור אובייקטיםחיסור אובייקטיםשרשור אובייקטיםהשוואת אובייקטים (<, >)חזרה – חישובים עם ארנק8כימוס
כללי מתן שמותClosures לשמירה על פרטיותגישה באמצעות Closuresטבלאות לקריאה בלבדלוגיקת אימותסיכום – כספת מאובטחת11תבניות עיצוב (בקצרה)
פונקציות Factoryטבלת Singletonתבנית IteratorObserver (מאזין)סיכום – מפעל Logger3מצב והתנהגות של אובייקטים
משתני מופעמתודות Getterמתודות Setterמאפיינים מחושביםעיצוב מחרוזותבדיקות שוויוןסיכום – ציון תלמיד6יסודות הירושה
הכנת מבנה הירושהירושת מתודותהרחבת הבנאיהוספת מתודות למחלקת הבתמשותף לעומת ייחודיסיכום – היררכיית צורותתרגלו בעצמכם: קומפיילר Lua אונליין