Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

أعضاء الـ Instance مقابل الـ Static

جزء من قسم البرمجة كائنية التوجه في رحلة Dart على Coddy. الدرس 17 من 110.

في فئات Dart، يمكن أن تنتمي الأعضاء (المتغيرات وmethod) إلى كائنات فردية أو إلى الفئة نفسها. يُعد فهم هذا التمييز أمرًا أساسيًا لتنظيم شفرتك بفعالية.

Instance members تنتمي إلى كل كائن تنشئه. يحصل كل كائن على نسخته الخاصة من متغيرات Instance، وتعمل أساليب Instance على بيانات ذلك الكائن المحدد:

class Dog {
  String name;  // متغير المثيل
  
  Dog(this.name);
  
  void bark() {  // دالة المثيل
    print('$name says woof!');
  }
}

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

dog1.bark();  // Buddy يقول woof!
dog2.bark();  // Max يقول woof!

لكل كائن Dog خاصية name خاصة به. تغيير اسم أحد الكلبين لا يؤثر في الآخر.

الأعضاء static تنتمي إلى class نفسها، وليس إلى أي كائن معيّن. وهي مشتركة بين جميع النسخ، ويتم الوصول إليها باستخدام اسم class:

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 لتتبّع عدد الأشخاص الذين زاروا هذا المعروض المحدد
    • متغير static باسم totalVisitors من النوع (int) يبدأ عند 0 لتتبّع إجمالي الزيارات عبر جميع المعروضات
    • منشئ يأخذ اسم المعروض
    • طريقة recordVisit() تزيد كلًا من visitorCount الخاص بالمعروض وtotalVisitors الخاص بالفئة
    • طريقة displayStats() تطبع معلومات المعروض
  • main.dart: استورد فئة المعروض وأنشئ معروضين:
    • معروض 'Dinosaur Bones'
    • معروض 'Ancient Egypt'
    سجّل 3 زيارات لمعروض Dinosaur Bones، ثم سجّل زيارتين لمعروض Ancient Egypt. بعد جميع الزيارات، استدعِ displayStats() لكل معروض بالترتيب الذي أُنشئا به، ثم اطبع إجمالي الزوار عبر جميع المعروضات.

يجب أن تطبع طريقة displayStats() بالتنسيق الدقيق التالي:

[name]: [visitorCount] visitors

بالنسبة إلى سطر إجمالي الزوار، اطبع:

Total museum visitors: [totalVisitors]

يمكنك الوصول إلى المتغير static باستخدام اسم الفئة Exhibit.totalVisitors.

الناتج المتوقع:

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

جرّب بنفسك

import 'exhibit.dart';

void main() {
  // TODO: Create a 'Dinosaur Bones' exhibit
  
  // TODO: Create an 'Ancient Egypt' exhibit
  
  // TODO: Record 3 visits to the Dinosaur Bones exhibit
  
  // TODO: Record 2 visits to the Ancient Egypt exhibit
  
  // TODO: استدعِ displayStats() على كل معرض بالترتيب
  
  // TODO: Print total museum visitors using Exhibit.totalVisitors
  // Format: Total museum visitors: [totalVisitors]
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس البرمجة كائنية التوجه

تدرّب بنفسك: مترجم Dart عبر الإنترنت