סיכום – אוסף מותאם אישית
חלק מהיחידה תכנות מונחה עצמים במסלול ה-Dart של Coddy. שיעור 75 מתוך 110.
אתגר
קלבואו נבנה מערכת ScoreBoard שעוקבת אחר הניקוד של השחקנים ומדגימה איך שיטות מיוחדות פועלות יחד כדי ליצור מחלקה מלוטשת ומקצועית!
תארגנו את הקוד שלכם בשני קבצים:
score_board.dart: צרו מחלקהPlayerומחלקהScoreBoardשפועלות יחד לניהול ניקוד במשחק.במחלקה
Playerצריכים להיותname(String) ו-score(int). היא צריכה:- לממש את
Comparable<Player>כדי שאפשר יהיה למיין שחקנים לפי הניקוד בסדר יורד (הגבוה ביותר קודם) - לדרוס את
==ואתhashCodeכך ששני שחקנים בעלי אותו שם ייחשבו שווים (ללא קשר לניקוד) - לדרוס את
toString()כך שתחזיר:[name]: [score] points
המחלקה
ScoreBoardצריכה לאחסן רשימת שחקנים ולספק:- שיטה
addPlayer(Player player)שמוסיפה שחקן רק אם הוא עדיין לא קיים (השתמשו במימוש השוויון שלכם!) - שיטה
call()שאינה מקבלת ארגומנטים ומחזירה עותק ממוין של רשימת השחקנים (ממוינת לפי הניקוד, מהגבוה ביותר לנמוך ביותר) - לדרוס את
toString()כך שתציג את כל השחקנים (ללא מיון), שחקן אחד בכל שורה, עם הכותרתScoreBoard:בשורה הראשונה
- לממש את
main.dart: ייבאו את קובץ לוח התוצאות שלכם והדגימו איך כל השיטות המיוחדות האלה פועלות יחד:- צרו
ScoreBoard - הוסיפו את השחקנים האלה:
Aliceעם150,Bobעם200,Charlieעם175 - נסו להוסיף שוב את
Aliceעם ניקוד999(היא אמורה להידחות ככפילות) - הדפיסו את לוח התוצאות באמצעות
toString() - הדפיסו שורה ריקה
- הדפיסו
Rankings: - הפעילו את לוח התוצאות כמו פונקציה כדי לקבל את הדירוגים הממוינים, ואז הדפיסו כל שחקן
- צרו
האתגר הזה משלב את toString() להצגה, את == ואת hashCode לזיהוי כפילויות, את compareTo() למיון, ואת call() לממשק נקי שניתן להפעיל!
הפלט הצפוי:
ScoreBoard:
Alice: 150 points
Bob: 200 points
Charlie: 175 points
Rankings:
Bob: 200 points
Charlie: 175 points
Alice: 150 pointsנסו בעצמכם
import 'score_board.dart';
void main() {
// TODO: צרו ScoreBoard
// TODO: הוסיפו שחקנים: Alice (150), Bob (200), Charlie (175)
// TODO: נסו להוסיף שוב את Alice עם ניקוד 999 (ההוספה אמורה להידחות כי Alice כבר קיימת)
// TODO: הדפיסו את טבלת הניקוד באמצעות toString()
// TODO: הדפיסו שורה ריקה
// TODO: הדפיסו "Rankings:"
// TODO: קראו לטבלת הניקוד כמו לפונקציה כדי לקבל דירוגים ממוינים, ואז הדפיסו כל שחקן
}
כל השיעורים ביחידה תכנות מונחה עצמים
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 במיקסיניםמיקסינים לעומת ירושהמיקסינים לעומת ממשקסיכום – מערכת בעלי החיים11מתודות מיוחדות
דריסת toString()דריסת hashCode ו־==הממשק Comparableמתודת call()דריסת noSuchMethodסיכום – אוסף מותאם אישית3מאפייני מחלקה
איברי מופע לעומת איברים סטטייםשדות final ו-constמשתני lateמתודות ושדות סטטייםGetters ו-Settersסיכום – מנהל חשבונות בנק6ירושה
ירושה בסיסיתמילת המפתח superדריסת מתודותהאנוטציה @overrideמילת המפתח final למחלקהבנאים וירושהסיכום – היררכיית עובדים9פולימורפיזם
יסודות הפולימורפיזםפולימורפיזם באמצעות ממשקיםבדיקת טיפוסים בזמן ריצההאופרטורים is ו-asמילת המפתח קווריאנטיסיכום — מעבד תשלומים12תכנות מונחה עצמים אסינכרוני
Future-ים ו-async/awaitיסודות ה-Streamsבקרי Streamsבנאים אסינכרונייםאסינכרוניות במתודות של מחלקהסיכום - אחזור נתוניםתרגלו בעצמכם: קומפיילר Dart אונליין