בדיקה סופית של הבנק
חלק מהיחידה תכנות מונחה עצמים במסלול ה-Lua של Coddy. שיעור 25 מתוך 70.
אתגר
קלכל הכבוד על בניית מערכת בנק דיגיטלי שלמה! המחלקה Account שלך מטפלת כעת בהפקדות, במשיכות, בבדיקות יתרה, בזיהוי חשבונות ובהעברות בין חשבונות. בואו נעמיד את הכול למבחן באמצעות תרחיש בנקאי מציאותי עם כמה חשבונות.
באתגר האחרון הזה תדמו בנק קטן עם שלושה לקוחות שמבצעים עסקאות שונות. כך תוודאו שכל המתודות שלכם פועלות יחד כראוי ושהחשבונות אכן שומרים על מצב עצמאי.
שני הקבצים שלכם:
Account.lua: מחלקת Account המלאה שלכם, עם כל הפונקציונליות שבניתם לאורך הפרויקט הזה (בנאי עם מזהה, deposit, withdraw, getBalance, __tostring ו-transfer).main.lua: סקריפט הדמיה שיוצר כמה חשבונות ומריץ סדרת עסקאות ביניהם.
תקבלו שש קלטים:
- המזהה של חשבון 1
- המזהה של חשבון 2
- המזהה של חשבון 3
- ההפקדה הראשונית לחשבון 1
- ההפקדה הראשונית לחשבון 2
- ההפקדה הראשונית לחשבון 3
בקובץ הראשי שלכם, דמו את יום הבנקאות הבא:
- צרו שלושה חשבונות עם המזהים שניתנו
- הפקידו את הסכומים הראשוניים בחשבונות המתאימים
- חשבון 1 מעביר 100 לחשבון 2
- חשבון 2 מעביר 150 לחשבון 3
- חשבון 3 מעביר 50 לחשבון 1
- חשבון 1 מנסה להעביר 1000 לחשבון 3 (הפעולה אמורה להיכשל)
- הדפיסו את שלושת החשבונות לפי הסדר (חשבון 1, אחריו 2 ואז 3)
לדוגמה, אם הקלטים הם A001, A002, A003, 500, 300 ו-200, הפלט אמור להיות:
Insufficient funds
Account [A001]: Balance = 450
Account [A002]: Balance = 250
Account [A003]: Balance = 300נעבור על החישוב: חשבון 1 מתחיל עם 500, מעביר 100 לחשבון 2 (כעת יש בו 400), ואז מקבל 50 מחשבון 3 (כעת יש בו 450). חשבון 2 מתחיל עם 300, מקבל 100 (כעת יש בו 400), ומעביר 150 לחשבון 3 (כעת יש בו 250). חשבון 3 מתחיל עם 200, מקבל 150 (כעת יש בו 350), ומעביר 50 לחשבון 1 (כעת יש בו 300). ההעברה האחרונה של 1000 נכשלת כי בחשבון 1 יש רק 450.
נסו בעצמכם
-- טענו את המודול Account
local Account = require('Account')
-- קראו את ששת ערכי הקלט
local id1 = io.read()
local id2 = io.read()
local id3 = io.read()
local initialDeposit1 = tonumber(io.read())
local initialDeposit2 = tonumber(io.read())
local initialDeposit3 = tonumber(io.read())
-- צרו שלושה חשבונות עם מזהים
-- TODO: צרו את account1, account2, account3 באמצעות Account:new()
-- הפקידו את הסכומים ההתחלתיים בכל אחד מהחשבונות המתאימים
-- TODO: הפקידו את initialDeposit1 ב-account1, את initialDeposit2 ב-account2, ואת initialDeposit3 ב-account3
-- חשבון 1 מעביר 100 לחשבון 2
-- TODO: account1:transfer(account2, 100)
-- חשבון 2 מעביר 150 לחשבון 3
-- TODO: account2:transfer(account3, 150)
-- חשבון 3 מעביר 50 לחשבון 1
-- TODO: account3:transfer(account1, 50)
-- חשבון 1 מנסה להעביר 1000 לחשבון 3 (הפעולה הזו אמורה להיכשל)
-- TODO: account1:transfer(account3, 1000)
-- הדפיסו את כל שלושת החשבונות לפי הסדר
-- TODO: הדפיסו את account1, account2, account3
כל השיעורים ביחידה תכנות מונחה עצמים
4פרויקט: בנק דיגיטלי
הגדרת הפרויקטפעולת הפקדה7פולימורפיזם ודריסת מתודות
דריסת מתודותקריאה למתודות של מחלקת האבטיפוסיות ברווזממשק משותףבדיקת טיפוססיכום – תפקידי עובדים2תבנית אב־טיפוס למחלקה
מושג אב־הטיפוסקישור באמצעות __indexהבנאי :new()אתחול מאפייניםמופעים עצמאייםסיכום – מפעל מכוניות5העמסת אופרטורים בתכנות מונחה עצמים
חיבור אובייקטיםחיסור אובייקטיםשרשור אובייקטיםהשוואת אובייקטים (<, >)חזרה – חישובים עם ארנק8כימוס
כללי מתן שמותClosures לשמירה על פרטיותגישה באמצעות Closuresטבלאות לקריאה בלבדלוגיקת אימותסיכום – כספת מאובטחת11תבניות עיצוב (בקצרה)
פונקציות Factoryטבלת Singletonתבנית IteratorObserver (מאזין)סיכום – מפעל Logger3מצב והתנהגות של אובייקטים
משתני מופעמתודות Getterמתודות Setterמאפיינים מחושביםעיצוב מחרוזותבדיקות שוויוןסיכום – ציון תלמיד6יסודות הירושה
הכנת מבנה הירושהירושת מתודותהרחבת הבנאיהוספת מתודות למחלקת הבתמשותף לעומת ייחודיסיכום – היררכיית צורותתרגלו בעצמכם: קומפיילר Lua אונליין