Menu
Coddy logo textTech

איברי מופע לעומת איברים סטטיים

חלק מהיחידה תכנות מונחה עצמים במסלול ה-Dart של Coddy. שיעור 17 מתוך 110.

במחלקות Dart, איברים (משתנים ומתודות) יכולים להשתייך לאובייקטים בודדים או למחלקה עצמה. הבנת ההבחנה הזאת חיונית לארגון יעיל של הקוד שלך.

חברי מופע שייכים לכל אובייקט שיוצרים. כל אובייקט מקבל עותק משלו של משתני מופע, ושיטות מופע פועלות על הנתונים של אותו אובייקט:

class Dog {
  String name;  // משתנה מופע
  
  Dog(this.name);
  
  void bark() {  // מתודת מופע
    print('$name says woof!');
  }
}

Dog dog1 = Dog('Buddy');
Dog dog2 = Dog('Max');

dog1.bark();  // Buddy אומר הב הב!
dog2.bark();  // Max אומר הב הב!

לכל אובייקט מסוג Dog יש name משלו. שינוי השם של כלב אחד אינו משפיע על הכלב האחר.

חברים סטטיים שייכים למחלקה עצמה, ולא לאובייקט מסוים. הם משותפים לכל המופעים וניגשים אליהם באמצעות שם המחלקה:

class Dog {
  String name;
  static int totalDogs = 0;  // משתנה סטטי
  
  Dog(this.name) {
    totalDogs++;
  }
}

Dog dog1 = Dog('Buddy');
Dog dog2 = Dog('Max');

print(Dog.totalDogs);  // 2

המשתנה totalDogs משותף — יש רק עותק אחד, ללא קשר למספר האובייקטים Dog שקיימים. ניגשים אליו דרך שם המחלקה Dog.totalDogs, ולא דרך מופע.

challenge icon

אתגר

קל

בוא נבנה מערכת לספירת מבקרים במוזיאון, שעוקבת הן אחר הביקורים בכל תצוגה בנפרד והן אחר הסטטיסטיקה הכוללת של המוזיאון.

תארגן את הקוד שלך בשני קבצים:

  • exhibit.dart: הגדר מחלקה Exhibit שמייצגת תצוגה במוזיאון. לכל תצוגה צריכים להיות:
    • משתנה מופע name (String) עבור שם התצוגה
    • משתנה מופע visitorCount (int) שמתחיל בערך 0 כדי לעקוב אחר מספר האנשים שביקרו בתצוגה הספציפית הזאת
    • משתנה סטטי totalVisitors (int) שמתחיל בערך 0 כדי לעקוב אחר מספר הביקורים הכולל בכל התצוגות
    • בנאי שמקבל את שם התצוגה
    • מתודה recordVisit() שמגדילה גם את visitorCount של התצוגה וגם את totalVisitors של המחלקה
    • מתודה displayStats() שמדפיסה את פרטי התצוגה
  • main.dart: ייבא את מחלקת התצוגה שלך וצור שתי תצוגות:
    • תצוגת 'Dinosaur Bones'
    • תצוגת 'Ancient Egypt'
    רשום 3 ביקורים בתצוגת Dinosaur Bones, ואז רשום 2 ביקורים בתצוגת Ancient Egypt. לאחר כל הביקורים, קרא ל-displayStats() עבור כל תצוגה לפי סדר יצירתן, ואז הדפס את מספר המבקרים הכולל בכל התצוגות.

המתודה displayStats() צריכה להדפיס בפורמט המדויק הזה:

[name]: [visitorCount] visitors

בשורת מספר המבקרים הכולל, הדפס:

Total museum visitors: [totalVisitors]

גש למשתנה הסטטי באמצעות שם המחלקה Exhibit.totalVisitors.

פלט צפוי:

Dinosaur Bones: 3 visitors
Ancient Egypt: 2 visitors
Total museum visitors: 5

נסו בעצמכם

import 'exhibit.dart';

void main() {
  // TODO: צרו תערוכה בשם 'Dinosaur Bones'
  
  // TODO: צרו תערוכה בשם 'Ancient Egypt'
  
  // TODO: רשמו 3 ביקורים בתערוכה Dinosaur Bones
  
  // TODO: רשמו 2 ביקורים בתערוכה Ancient Egypt
  
  // TODO: קראו ל-displayStats() עבור כל תערוכה לפי הסדר
  
  // TODO: הדפיסו את המספר הכולל של המבקרים במוזיאון באמצעות Exhibit.totalVisitors
  // פורמט: Total museum visitors: [totalVisitors]
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: קומפיילר Dart אונליין