الأصناف والكائنات

تعديل
نسخ الدرس
تحميل الدرس

الأصناف والكائنات

حتى الآن تعلمنا كيف نستخدم أنواع البيانات المُدمجة في روبي مثل الأرقام والنصوص والمصفوفات. لكن ماذا لو أردنا إنشاء أنواع بيانات خاصة بنا؟ هنا تأتي البرمجة الكائنية (Object-Oriented Programming)!

ما هي البرمجة الكائنية؟

البرمجة الكائنية هي أسلوب برمجي يُنظّم الشيفرة حول الكائنات بدلاً من الدوال فقط. الكائن يجمع بين:

  • البيانات (الخصائص/الصفات)
  • السلوكيات (الدوال/الأفعال)

مثال من الحياة الواقعية

فكّر في سيارة:

  • الخصائص: اللون، الماركة، السرعة القصوى، عدد الأبواب
  • السلوكيات: تشغيل، إيقاف، تسريع، فرملة

في البرمجة الكائنية، نُنشئ "قالباً" (الصنف) يصف السيارة، ثم نُنشئ "نسخاً" (كائنات) منه.

كل شيء في روبي كائن!

في روبي، كل شيء هو كائن:

ما هو الصنف (Class)؟

الصنف هو قالب أو مُخطط يصف:

  • ما هي البيانات التي سيحتويها الكائن
  • ما هي السلوكيات التي يمكن للكائن القيام بها

فكّر في الصنف كـ وصفة طبخ والكائن كـ الطبق الناتج.

إنشاء صنف بسيط

ملاحظات:

  • اسم الصنف يبدأ بحرف كبير (CamelCase)
  • نستخدم class لتعريف الصنف
  • نستخدم end لإغلاقه

إنشاء كائن من الصنف

متغيرات النسخة (Instance Variables)

متغيرات النسخة تُخزّن البيانات الخاصة بكل كائن. تبدأ بـ @:

ملاحظات مهمة:

  • @name خاص بكل كائن (كل شخص له اسمه الخاص)
  • متغيرات النسخة تبقى محفوظة طوال حياة الكائن
  • لا يمكن الوصول لها مباشرة من خارج الكائن

دوال النسخة (Instance Methods)

الدوال المُعرّفة داخل الصنف تُسمى دوال النسخة. كل كائن يمكنه استدعاءها:

مثال شامل: صنف الطالب

الفرق بين الصنف والكائن

الصنف (Class)الكائن (Object)
قالب/مُخططنسخة من القالب
يُعرّف الخصائص والسلوكياتيحتوي على قيم فعلية
واحد فقطيمكن إنشاء عدد غير محدود
لا يُخزّن بياناتيُخزّن بياناته الخاصة
class Personperson1 = Person.new

لماذا نستخدم الأصناف؟

1. التنظيم

بدلاً من متغيرات منفصلة:

مع الأصناف:

2. إعادة الاستخدام

الصنف يُكتب مرة ويُستخدم عدة مرات:

3. الكبسلة (Encapsulation)

إخفاء التفاصيل الداخلية:

أمثلة عملية

مثال 1: صنف الكتاب

مثال 2: صنف المنتج

مثال 3: صنف اللاعب

أخطاء شائعة

1. نسيان @ لمتغيرات النسخة

2. استدعاء دالة على الصنف بدل الكائن

3. نسيان new عند إنشاء الكائن

4. محاولة الوصول لمتغير النسخة مباشرة

جدول ملخص

المفهومالوصفمثال
الصنفقالب لإنشاء كائناتclass Person; end
الكائننسخة من الصنفperson = Person.new
متغير النسخةبيانات خاصة بالكائن@name = "أحمد"
دالة النسخةسلوك الكائنdef greet; end
newإنشاء كائن جديدPerson.new
classمعرفة نوع الكائنobj.class

تمرين: إنشاء صنف Person

حان وقت التطبيق! في محرر الشيفرة على اليسار:

المطلوب:

  1. أنشئ صنف Person يحتوي على:
    • دالة set_info تستقبل name و age
    • دالة get_name تُرجع الاسم
    • دالة get_age تُرجع العمر
    • دالة introduce تطبع: "مرحباً، أنا [الاسم] وعمري [العمر] سنة"
  2. أنشئ كائناً وعيّن له اسم "فاطمة" وعمر 25
  3. استدعِ دالة introduce

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

تلميحات:

  • ابدأ بـ class Person وأغلق بـ end
  • استخدم @name و @age لتخزين البيانات
  • استخدم دمج المتغيرات في introduce: puts "مرحباً، أنا #{@name} وعمري #{@age} سنة"
  • لا تنسَ Person.new لإنشاء الكائن

تذكّر: الصنف هو القالب والكائن هو النسخة. متغيرات النسخة (@) تُخزّن بيانات كل كائن بشكل مستقل. في الدرس القادم سنتعلم طريقة أسهل لتعيين البيانات باستخدام initialize والموصّلات!