Skip to content

الفصل 6: البرمجة الكائنية — الأساسيات

📖 المستوى: مبتدئ  |  ⏱ الوقت المقدّر: 60 دقيقة  |  📝 تمارين: 8

ما ستتعلم في هذا الفصل

  • مفهوم الأصناف والكائنات
  • تعريف صنف باستخدام صنف
  • الباني باني() والخصائص
  • الدوال التابعة (Methods)
  • الكلمة المفتاحية هذا
  • محددات الوصول: عام، خاص، محمي

6.1 ما هو الصنف؟

الصنف هو قالب لإنشاء كائنات تشترك في نفس الخصائص والسلوك:

sad
صنف سيارة
    # الخصائص
    متغير ماركة
    متغير موديل
    متغير سرعة = 0

    # الباني
    باني(ماركة، موديل)
        هذا.ماركة = ماركة
        هذا.موديل = موديل
    نهاية

    # دالة تابعة
    دالة تسارع(مقدار)
        هذا.سرعة = هذا.سرعة + مقدار
        اطبع_سطر(هذا.ماركة + " تتسارع إلى " + هذا.سرعة + " كم/س")
    نهاية

    دالة فرملة()
        هذا.سرعة = 0
        اطبع_سطر(هذا.ماركة + " توقفت")
    نهاية

    دالة معلومات()
        اطبع_سطر("السيارة: " + هذا.ماركة + " " + هذا.موديل)
        اطبع_سطر("السرعة: " + هذا.سرعة + " كم/س")
    نهاية
نهاية

# إنشاء كائنات
متغير سيارتي = جديد سيارة("تويوتا"، "كامري")
سيارتي.تسارع(60)
سيارتي.تسارع(40)
سيارتي.معلومات()
سيارتي.فرملة()

6.2 الباني باني()

الباني دالة خاصة تُستدعى تلقائياً عند إنشاء كائن جديد:

sad
صنف طالب
    متغير اسم
    متغير عمر
    متغير درجات = []

    باني(اسم، عمر)
        هذا.اسم = اسم
        هذا.عمر = عمر
    نهاية

    دالة أضف_درجة(درجة)
        هذا.درجات.أضف(درجة)
    نهاية

    دالة المعدل()
        إذا (طول(هذا.درجات) == 0)
            ارجع 0
        نهاية
        متغير مجموع = 0
        لكل درجة في هذا.درجات
            مجموع = مجموع + درجة
        نهاية
        ارجع مجموع / طول(هذا.درجات)
    نهاية

    دالة عرض()
        اطبع_سطر("الطالب: " + هذا.اسم)
        اطبع_سطر("العمر: " + هذا.عمر)
        اطبع_سطر("المعدل: " + هذا.المعدل())
    نهاية
نهاية

متغير ط = جديد طالب("أحمد"، 20)
ط.أضف_درجة(90)
ط.أضف_درجة(85)
ط.أضف_درجة(92)
ط.عرض()

6.3 الكلمة المفتاحية هذا

هذا يشير إلى الكائن الحالي — يُستخدم للوصول لخصائصه:

sad
صنف مستطيل
    متغير عرض
    متغير ارتفاع

    باني(عرض، ارتفاع)
        هذا.عرض = عرض         # هذا.عرض = خاصية الكائن
        هذا.ارتفاع = ارتفاع   # عرض = المعامل المُمرّر
    نهاية

    دالة المساحة()
        ارجع هذا.عرض * هذا.ارتفاع
    نهاية

    دالة المحيط()
        ارجع 2 * (هذا.عرض + هذا.ارتفاع)
    نهاية
نهاية

متغير م = جديد مستطيل(8، 5)
اطبع_سطر("المساحة: " + م.المساحة())   # 40
اطبع_سطر("المحيط: " + م.المحيط())     # 26

6.4 محددات الوصول

sad
صنف حساب_بنكي
    # خاص — لا يمكن الوصول من خارج الصنف
    خاص متغير الرصيد = 0
    خاص متغير الرقم_السري

    # عام — يمكن الوصول من أي مكان (الافتراضي)
    عام متغير اسم_المالك

    باني(اسم، رقم_سري)
        هذا.اسم_المالك = اسم
        هذا.الرقم_السري = رقم_سري
    نهاية

    عام دالة إيداع(مبلغ)
        إذا (مبلغ > 0)
            هذا.الرصيد = هذا.الرصيد + مبلغ
            اطبع_سطر("تم إيداع " + مبلغ + " ريال")
        نهاية
    نهاية

    عام دالة سحب(مبلغ، رقم_سري)
        إذا (رقم_سري != هذا.الرقم_السري)
            اطبع_سطر("❌ الرقم السري غير صحيح")
            ارجع خطأ
        نهاية
        إذا (مبلغ > هذا.الرصيد)
            اطبع_سطر("❌ رصيد غير كافٍ")
            ارجع خطأ
        نهاية
        هذا.الرصيد = هذا.الرصيد - مبلغ
        اطبع_سطر("تم سحب " + مبلغ + " ريال")
        ارجع صحيح
    نهاية

    عام دالة الرصيد_الحالي()
        ارجع هذا.الرصيد
    نهاية
نهاية

متغير حساب = جديد حساب_بنكي("سعد"، "1234")
حساب.إيداع(5000)
حساب.سحب(2000، "1234")
اطبع_سطر("الرصيد: " + حساب.الرصيد_الحالي())

6.5 البنيات بنية

البنية هي نسخة مبسطة من الصنف — بيانات بدون سلوك معقد:

sad
بنية نقطة
    متغير س = 0
    متغير ص = 0
نهاية

متغير ن = جديد نقطة()
ن.س = 10
ن.ص = 20
اطبع_سطر("النقطة: (" + ن.س + "، " + ن.ص + ")")

6.6 مثال متكامل: نظام إدارة مكتبة

sad
صنف كتاب
    متغير عنوان
    متغير مؤلف
    متغير متاح = صحيح

    باني(عنوان، مؤلف)
        هذا.عنوان = عنوان
        هذا.مؤلف = مؤلف
    نهاية

    دالة عرض()
        متغير حالة = هذا.متاح ? "✅ متاح" : "❌ مُعار"
        اطبع_سطر(هذا.عنوان + " — " + هذا.مؤلف + " [" + حالة + "]")
    نهاية
نهاية

صنف مكتبة
    متغير الاسم
    متغير الكتب = []

    باني(اسم)
        هذا.الاسم = اسم
    نهاية

    دالة أضف_كتاب(كتاب)
        هذا.الكتب.أضف(كتاب)
    نهاية

    دالة استعر(عنوان)
        لكل كتاب في هذا.الكتب
            إذا (كتاب.عنوان == عنوان و كتاب.متاح)
                كتاب.متاح = خطأ
                اطبع_سطر("📖 تم استعارة: " + عنوان)
                ارجع صحيح
            نهاية
        نهاية
        اطبع_سطر("الكتاب غير متاح")
        ارجع خطأ
    نهاية

    دالة أرجع(عنوان)
        لكل كتاب في هذا.الكتب
            إذا (كتاب.عنوان == عنوان و ليس كتاب.متاح)
                كتاب.متاح = صحيح
                اطبع_سطر("📚 تم إرجاع: " + عنوان)
                ارجع صحيح
            نهاية
        نهاية
        ارجع خطأ
    نهاية

    دالة عرض_جميع()
        اطبع_سطر("=== مكتبة " + هذا.الاسم + " ===")
        لكل كتاب في هذا.الكتب
            كتاب.عرض()
        نهاية
    نهاية
نهاية

# استخدام
متغير مكتبتي = جديد مكتبة("المعرفة")
مكتبتي.أضف_كتاب(جديد كتاب("البرمجة بلغة ص"، "سعد"))
مكتبتي.أضف_كتاب(جديد كتاب("الخوارزميات"، "أحمد"))
مكتبتي.أضف_كتاب(جديد كتاب("هياكل البيانات"، "فاطمة"))

مكتبتي.عرض_جميع()
مكتبتي.استعر("الخوارزميات")
مكتبتي.عرض_جميع()

تمارين

تمرين 1: صنف دائرة

أنشئ صنف دائرة يحسب المساحة والمحيط.

💡 الحل
sad
صنف دائرة
    متغير نصف_القطر

    باني(نصف_القطر)
        هذا.نصف_القطر = نصف_القطر
    نهاية

    دالة المساحة()
        ارجع 3.14159 * هذا.نصف_القطر ** 2
    نهاية

    دالة المحيط()
        ارجع 2 * 3.14159 * هذا.نصف_القطر
    نهاية
نهاية

متغير د = جديد دائرة(5)
اطبع_سطر("المساحة: " + د.المساحة())
اطبع_سطر("المحيط: " + د.المحيط())

ملخص الفصل

المفهومالصياغة
تعريف صنفصنف اسم ... نهاية
البانيباني(معاملات) ... نهاية
إنشاء كائنجديد صنف(معاملات)
الإشارة للكائن الحاليهذا.خاصية
دالة تابعةدالة اسم() ... نهاية
بنيةبنية اسم ... نهاية
وصول عامعام (الافتراضي)
وصول خاصخاص
وصول محميمحمي

مُرخَّص بموجب رخصة MIT