מתודות ושדות סטטיים
חלק מהיחידה תכנות מונחה עצמים במסלול ה-Dart של Coddy. שיעור 20 מתוך 110.
עכשיו, כשאתה מבין את ההבדל בין איברי מופע לאיברים סטטיים, נבחן כיצד להשתמש במתודות ובשדות סטטיים ביעילות. איברים סטטיים מתאימים במיוחד לפונקציונליות ששייכת למושג המחלקה עצמו ולא לאובייקטים בודדים.
שדות סטטיים מאחסנים נתונים המשותפים לכל המופעים. שימושים נפוצים כוללים מונים, ערכי תצורה או נתונים שנשמרו במטמון:
class MathHelper {
static const double pi = 3.14159;
static int calculationCount = 0;
static double circleArea(double radius) {
calculationCount++;
return pi * radius * radius;
}
}
print(MathHelper.circleArea(5)); // 78.53975
print(MathHelper.circleArea(3)); // 28.27431
print(MathHelper.calculationCount); // 2שימו לב שאתם קוראים למתודות סטטיות ישירות בשם המחלקה, ולא על מופע. המחלקה MathHelper פועלת כמו כלי עזר — אין צורך ליצור אובייקט מסוג MathHelper.
כלל חשוב: מתודות סטטיות אינן יכולות לגשת ישירות לחברים של מופע. אין להן גישה אל this כי הן אינן קשורות לאובייקט מסוים:
class Counter {
int value = 0; // שדה של מופע
static int total = 0; // שדה סטטי
void increment() {
value++; // תקין - מתודה של מופע ניגשת לשדה של מופע
total++; // תקין - מתודה של מופע יכולה לגשת לשדה סטטי
}
static void reset() {
total = 0; // תקין - מתודה סטטית ניגשת לשדה סטטי
// value = 0; // שגיאה! אי אפשר לגשת לשדה של מופע
}
}השתמש באיברים סטטיים כשהפונקציונליות אינה תלויה במצב האובייקט — פונקציות עזר, מעקב אחר מפעלים או קבועים משותפים הם מועמדים מתאימים.
אתגר
קלבואו נבנה מחלקת עזר לפעולות על מחרוזות, שמדגימה כיצד מתודות ושדות סטטיים פועלים יחד כדי לספק פונקציונליות שימושית בלי צורך ליצור אובייקטים.
תיצרו שני קבצים כדי לארגן את הקוד שלכם:
string_utils.dart: הגדירו מחלקה בשםStringUtilsשתשמש כמחלקת עזר. המחלקה צריכה לכלול:static const String defaultSeparatorשערכו'-'static int operationCountשמתחיל בערך0כדי לעקוב אחר מספר הפעולות שבוצעו- מתודה סטטית
reverse(String text)שמגדילה אתoperationCountומחזירה את המחרוזת בסדר הפוך - מתודה סטטית
join(String first, String second)שמגדילה אתoperationCountומחזירה את שתי המחרוזות מחוברות באמצעותdefaultSeparator - מתודה סטטית
countVowels(String text)שמגדילה אתoperationCountומחזירה את מספר התנועות (a, e, i, o, u - ללא תלות באותיות גדולות או קטנות) - מתודה סטטית
getStats()שמחזירה מחרוזת המציגה את מספר הפעולות הכולל שבוצעו
main.dart: ייבאו את מחלקת העזר והשתמשו במתודות הסטטיות שלה:- קראו ל־
reverse()עם'hello'והדפיסו את התוצאה - קראו ל־
join()עם'dart'ועם'lang'והדפיסו את התוצאה - קראו ל־
countVowels()עם'Programming'והדפיסוVowels: [count] - הדפיסו את הנתונים הסטטיסטיים באמצעות
getStats()
- קראו ל־
זכרו לקרוא לכל המתודות ישירות באמצעות שם המחלקה, מכיוון שהן סטטיות — לא תיצרו אובייקטים של StringUtils.
המתודה getStats() צריכה להחזיר את התוצאה בפורמט הבא:
Operations performed: [operationCount]פלט צפוי:
olleh
dart-lang
Vowels: 3
Operations performed: 3נסו בעצמכם
import 'string_utils.dart';
void main() {
// TODO: קראו ל-reverse() עם 'hello' והדפיסו את התוצאה
// TODO: קראו ל-join() עם 'dart' ו-'lang' והדפיסו את התוצאה
// TODO: קראו ל-countVowels() עם 'Programming' והדפיסו "Vowels: [count]"
// TODO: הדפיסו את הנתונים הסטטיסטיים באמצעות getStats()
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תכנות מונחה עצמים
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 אונליין