الفصل 6: البرمجة الكائنية — الأساسيات
ما ستتعلم في هذا الفصل
- مفهوم الأصناف والكائنات
- تعريف صنف باستخدام
صنف - الباني
باني()والخصائص - الدوال التابعة (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
اطبع_سطر("المحيط: " + م.المحيط()) # 266.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)
اطبع_سطر("المساحة: " + د.المساحة())
اطبع_سطر("المحيط: " + د.المحيط())ملخص الفصل
| المفهوم | الصياغة |
|---|---|
| تعريف صنف | صنف اسم ... نهاية |
| الباني | باني(معاملات) ... نهاية |
| إنشاء كائن | جديد صنف(معاملات) |
| الإشارة للكائن الحالي | هذا.خاصية |
| دالة تابعة | دالة اسم() ... نهاية |
| بنية | بنية اسم ... نهاية |
| وصول عام | عام (الافتراضي) |
| وصول خاص | خاص |
| وصول محمي | محمي |