מערכת בנקאית
חלק מהיחידה תכנות מונחה עצמים במסלול ה-Dart של Coddy. שיעור 108 מתוך 110.
אתגר
קלבואו נבנה מערכת בנקאית שמדמה פעולות פיננסיות מהעולם האמיתי באמצעות עקרונות ה-OOP ששלטת בהם לאורך הקורס הזה. תיצור חשבונות עם כללים שונים, תעקוב אחר עסקאות ותנהל לקוחות — הכול מאורגן בכמה קבצים.
מערכת הבנקאות שלך תהיה מאורגנת בשישה קבצים:
transaction.dart: צור מחלקהTransactionשמייצגת רשומה בלתי ניתנת לשינוי של פעולה פיננסית. לכל עסקה יש שדותfinalעבורtype(String - "deposit", "withdrawal", או "transfer"),amount(double) ו-timestamp(DateTime). דרוס אתtoString()כך שתחזיר[type] $amount.account.dart: צור מחלקה מופשטתAccountעם_balanceפרטי (double), מספר חשבוןfinal(accountNumber- String), ו-List<Transaction>לאחסון היסטוריית העסקאות. כלול getter עבור היתרה, setter מוגןset balance(double value)כדי שמחלקות יורשות בקבצים אחרים יוכלו לעדכן את היתרה, מתודה מופשטתbool canWithdraw(double amount)שעל המחלקות היורשות לממש, ואת המתודות הממשיות הבאות:deposit(double amount)- מוסיפה ליתרה, רושמת עסקה ומדפיסהDeposited $amount. Balance: $balancewithdraw(double amount)- אםcanWithdraw()מחזירה true, מפחיתה מהיתרה, רושמת עסקה ומדפיסהWithdrew $amount. Balance: $balance. אחרת מדפיסהWithdrawal denied.getTransactionCount()- מחזירה את מספר העסקאות
savings_account.dart: צורSavingsAccountשיורשת מ-Account. לחשבונות חיסכון יש מגבלת משיכה — אי אפשר למשוך יותר מ-$500 בעסקה אחת. ממש אתcanWithdraw()כדי לאכוף את הכלל הזה (וודא גם שיש יתרה מספקת). הוסף מתודהapplyInterest(double rate)שמגדילה את היתרה בשיעור האחוז הנתון באמצעות ה-getter וה-setter שלbalance, ואז מדפיסהInterest applied. Balance: $balance.checking_account.dart: צורCheckingAccountשיורשת מ-Account. לחשבונות עו"ש יש הגנת משיכת יתר של עד $100 — הם יכולים להיכנס ליתרה שלילית, אך לא לרדת מתחת ל--$100. ממש אתcanWithdraw()כך שתאפשר משיכות כל עוד היתרה לאחר המשיכה נשארת לפחות -$100.customer.dart: צור מחלקהCustomerעםid(String),name(String) ו-List<Account>עבור החשבונות של הלקוח. כלול את המתודותaddAccount(Account account)להוספת חשבון, ו-getTotalBalance()שמחזירה את סכום היתרות של כל החשבונות. דרוס אתtoString()כך שתחזירCustomer: name (X accounts).main.dart: הצג את מערכת הבנקאות שלך. צור לקוח (C001,John Smith). צורSavingsAccount(SAV001, יתרת פתיחה של $1000) ו-CheckingAccount(CHK001, יתרת פתיחה של $500). הוסף את שני החשבונות ללקוח והדפס את הלקוח. לאחר מכן בצע את הפעולות הבאות:- הפקד $200 לחשבון החיסכון
- משוך $300 מחשבון החיסכון (אמור להצליח)
- נסה למשוך $600 מחשבון החיסכון (אמור להידחות — חורג מהמגבלה)
- החל ריבית של 5% על חשבון החיסכון
- משוך $550 מחשבון העו"ש (אמור להצליח באמצעות משיכת יתר)
- נסה למשוך עוד $100 מחשבון העו"ש (אמור להידחות — יחרוג ממגבלת משיכת היתר)
Savings transactions: Xו-Total balance: $Y(בפורמט של 2 ספרות אחרי הנקודה העשרונית).
פלט צפוי:
Customer: John Smith (2 accounts)
Deposited $200.0. Balance: $1200.0
Withdrew $300.0. Balance: $900.0
Withdrawal denied
Interest applied. Balance: $945.0
Withdrew $550.0. Balance: $-50.0
Withdrawal denied
Savings transactions: 3
Total balance: $895.00נסו בעצמכם
import 'transaction.dart';
import 'account.dart';
import 'savings_account.dart';
import 'checking_account.dart';
import 'customer.dart';
void main() {
// TODO: צרו לקוח עם id "C001" ושם "John Smith"
// TODO: צרו SavingsAccount עם accountNumber "SAV001" ויתרה התחלתית של $1000
// TODO: צרו CheckingAccount עם accountNumber "CHK001" ויתרה התחלתית של $500
// TODO: הוסיפו את שני החשבונות ללקוח
// TODO: הדפיסו את הלקוח
// TODO: בצעו את הפעולות הבאות:
// 1. הפקידו $200 בחשבון החיסכון
// 2. משכו $300 מחשבון החיסכון (הפעולה אמורה להצליח)
// 3. נסו למשוך $600 מחשבון החיסכון (הפעולה אמורה להידחות - חורגת מהמגבלה)
// 4. החילו ריבית של 5% על חשבון החיסכון
// 5. משכו $550 מחשבון העו״ש (הפעולה אמורה להצליח באמצעות משיכת יתר)
// 6. נסו למשוך עוד $100 מחשבון העו״ש (הפעולה אמורה להידחות - היא תחרוג ממסגרת משיכת היתר)
// TODO: הדפס "Savings transactions: X" כאשר X הוא מספר העסקאות
// TODO: הדפס "Total balance: \$Y" כאשר Y מעוצב עם 2 ספרות אחרי הנקודה העשרונית
}
כל השיעורים ביחידה תכנות מונחה עצמים
1יסודות התכנות מונחה העצמים
קבצים חיצונייםספריות וייבואמבוא לתכנות מונחה עצמיםמחלקות לעומת אובייקטיםמילת המפתח thisמתודותמשתני מופעיסודות הבנאיחזרה: מחשבון פשוט4בטיחות מפני ערכי null
מבוא לבטיחות מפני ערכי nullניתן להקצאה ל-null לעומת לא ניתן להקצאה ל-nullהאופרטורים ? ו-!מילת המפתח Late ובטיחות מפני ערכי nullאופרטורים מודעי nullבטיחות מפני ערכי null במחלקותסיכום – מערכת פרופילי משתמשים7מחלקות מופשטות וממשקים
מחלקות מופשטותמתודות מופשטותממשקים ב-Dartממשקים משתמעיםמימוש לעומת הורשהממשקים מרוביםחזרה – מחשבון צורות10אוספים וגנריות
סקירה כללית של List, Set ו-Mapאוספים בטוחים מבחינת טיפוסיםמחלקות גנריותמתודות גנריותאילוצים גנרייםIterable ו-Iteratorסיכום – אחסון גנרי13מושגי OOP מתקדמים
הרכבה לעומת הורשהמתודות הרחבהמחלקות קריאותמחלקות אטומות (Dart 3)רשומות (Dart 3)תבניות והתאמה (3.0)טיפוסים מונים עם מתודות16פרויקט: ניהול ספרייה
סקירת הפרויקטמחלקות ספר ומשתמש2בנאים ב-Dart
בנאי ברירת מחדלבנאים בעלי שםרשימות אתחולבנאים קבועיםבנאי Factoryבנאים מפניםסיכום - בונה צורות5כימוס
חברים ציבוריים לעומת פרטייםמוסכמת הקידומת _פרטיות ברמת הספרייההעמקה ב-getters וב-settersהסתרת מידעסיכום – רשומות תלמידים8מיקסינים
מבוא למיקסיניםיצירת מיקסיניםשימוש במספר מיקסיניםמילת המפתח on במיקסיניםמיקסינים לעומת ירושהמיקסינים לעומת ממשקסיכום – מערכת בעלי החיים3מאפייני מחלקה
איברי מופע לעומת איברים סטטייםשדות final ו-constמשתני lateמתודות ושדות סטטייםGetters ו-Settersסיכום – מנהל חשבונות בנק6ירושה
ירושה בסיסיתמילת המפתח superדריסת מתודותהאנוטציה @overrideמילת המפתח final למחלקהבנאים וירושהסיכום – היררכיית עובדים9פולימורפיזם
יסודות הפולימורפיזםפולימורפיזם באמצעות ממשקיםבדיקת טיפוסים בזמן ריצההאופרטורים is ו-asמילת המפתח קווריאנטיסיכום — מעבד תשלומים12תכנות מונחה עצמים אסינכרוני
Future-ים ו-async/awaitיסודות ה-Streamsבקרי Streamsבנאים אסינכרונייםאסינכרוניות במתודות של מחלקהסיכום - אחזור נתוניםתרגלו בעצמכם: קומפיילר Dart אונליין