هي اسلوب لكتابة الكود يعتمد على استخدام الكائنات فما هي الكائنات ؟
هي مجموع كلمة كائن والكائن هو نوع من المتغيرات يتم انشائه من قبل المبرمج وهذا النوع يمتلك خواص ودوال خاصة به ، حيث يمكن ان يمثل الكائن صفحة ويب او زر او نص او شخص ويتم انشاء الكائنات هكذا :-
انشاء_كائن_باسم شخص :
الاسم = "خالد"
العمر = 18
انشاء_دالة_باسم اكتب_الاسم(هذا_الكائن) :
اكتب(هذا_الكائن.الاسم)
لكي تفهم بشكل افضل اعتبر ان الكائن عبارة شيء الكتروني مثل النص او الصور او الازرار ويتم تخزينه في متغير
حيث يتم انشاء الكائنات عن طريق كتابة الامر انشاء_كائن_باسم متبوعة باسم الكائن ومن ثم يتم كتابة المتغيرات التي تمثل خواص الكائن مثل الاسم واللون و الطول ودوال التعامل مع الكائن مثل كتابة الاسم وغير ذلك
وعند انشاء الدوال داخل الكائن نضع "هذا_الكائن" ضمن اقواس الدالة
عند انشاء تطبيقات الحاسوب من خلال عربي بلس عبر مكتبة الواجهات_الرسومية فان الازرار و النوافذ والصور وغيرها من الاشياء التي نستخدمها في برمجة التطبيقات كلها عبارة عن كائنات موجودة ضمن المكتبات ولاستخدامها نخزنها في متغير ، ولها خواص مثل اللون وايضا دوال للتعامل معها مثل تحريك العنصر وغير ذلك
انشاء_كائن_باسم شخص() :
الاسم = ""
العمر = 0
انشاء_كائن_باسم اكتب_الاسم(هذا_الكائن) :
اكتب(هذا_الكائن.الاسم)
خالد = شخص() ;
خالد.الاسم ="خالد"
خالد.العمر = 25
خالد.اكتب_الاسم()
حيث قمنا في المثال السابق بانشاء نوع متغيرات او كائن لتخزين الاشخاص له خاصيتين هما الاسم و العمر وله دالة خاصة فيه هي اكتب_الاسم تستخدم لكتابة الاسم ومن ثم انشئنا منه نسخة (اي قمنا بانشاء متغير جديد من هذا الكائن) لتخزين معلومات شخص ما
كانت هذه فقط المقدمة عن البرمجة الكائنية التوجه لكي تفهم استخداماتها الان سنبدأ بالتطبيق العملي
عند تسمية الكائنات يجب الالتزام بنفس قواعد تسمية المتغيرات
كما ذكرنا مسبقا فان الكائن يتكون من دوال ومتغيرات (وتسمى ايضا بالخواص) وعند انشاء دوال داخل الكائن يجب ان يتم ادخال الكلمة هذا_الكائن ضمن المتغيرات التي تاخذها الدالة حتى يتعرف مترجم اكواد عربي بلس على ان هذه الدالة تابعة للكائن
انشاء_دالة_باسم اكتب_الاسم(هذا_الكائن , رقم) :
لا_شيئ
اذا كنا نريد استخدام احد المتغيرات او الدوال الموجودة في الكائن ضمن احد دواله فيجب كتابة الكلمة هذا_الكائن ثم نقطة ثم اسم المتغير او الدالة المطلوبة
انشاء_كائن_باسم شخص() :
الاسم = ""
انشاء_دالة_باسم ترحيب(هذا_الكائن) :
اكتب("مرحبا")
انشاء_دالة_باسم اكتب_الاسم(هذا_الكائن) :
هذا_الكائن.ترحيب()
اكتب(هذا_الكائن.الاسم)
عند انشاء متغيرات داخل الدوال بالطريقة العادية عن طريق كتابة اسم المتغير بعده علامة = تليها القيمة فانه لن تتمكن من الوصول الى المتغير داخل الدوال الاخرى في نفس الكائن - انظر الى المثال :
انشاء_كائن_باسم شخص() :
انشاء_دالة_باسم تحديد_العمر(هذا_الكائن) :
العمر = 99
انشاء_دالة_باسم اكتب_العمر(هذا_الكائن) :
اكتب(هذا_الكائن.العمر)
خالد = شخص()
خالد.تحديد_العمر()
خالد.اكتب_العمر()
هنا سيحدث خطأ لان مترجم اكواد عربي بلس لن يتمكن من العثور على المتغير العمر ولحل هذه المشكلة نقوم بانشاء المتغير بالطريقة التالية
انشاء_كائن_باسم شخص() :
انشاء_دالة_باسم تحديد_العمر(هذا_الكائن) :
هذا_الكائن.العمر = 99
انشاء_دالة_باسم اكتب_العمر(هذا_الكائن) :
اكتب(هذا_الكائن.العمر)
خالد = شخص()
خالد.تحديد_العمر()
خالد.اكتب_العمر()
حيث نقوم بانشاء المتغير عن طريق كتابة هذا_الكائن ثم نقطة ثم اسم المتغير وقيمته وهكذا ستتمكن من الوصول الى المتغير من خارج الدالة في الدوال الاخرى
هي دالة يتم انشائها بواسطة المبرمج وعند انشاء نسخة من الكائن - اي انشاء متغير جديد لتخزين هذا الكائن - سيتم تنفيذ محتوى هذه الدالة تلقائيا ، اليك مثال
انشاء_كائن_باسم شخص() :
انشاء_دالة_باسم __بناء__(هذا_الكائن) :
اكتب("تم الانشاء")
خالد = شخص()
حيث بمجرد انشاء نسخة من الكائن سيتم تنفيذ المحتوى الموجود في الدالة __بناء__ وسيتم كتابة "تم الانشاء"
قد تلاحظ في بعض الكائنات انه يمكن ادخال البيانات اليها مثل الدوال بالشكل التالي
خالد = شخص(الاسم ="خالد" , العمر =9)
وقد تتساءل كيف يمكن فعل ذلك ، لفعل ذلك نستخدم الدالة __بناء__ ونقوم بجعل المدخلات التي ياخذها الكائن موجودة في __بناء__ اليك مثال
انشاء_كائن_باسم شخص() :
انشاء_دالة_باسم __بناء__(هذا_الكائن , الاسم , العمر) :
اكتب(الاسم)
اكتب(العمر)
ومن ثم يمكن تخزينها في متغيرات كخواص للكائن هكذا
انشاء_كائن_باسم شخص() :
الاسم =""
العمر =0
انشاء_دالة_باسم __بناء__(هذا_الكائن , اسم_الشخص , عمر_الشخص) :
هذا_الكائن.الاسم = اسم_الشخص
هذا_الكائن.العمر = عمر_الشخص
التغليف ببساطة هو منع بعض الدوال او الخواص من الوصول من خارج الكائن ، حيث بعد انشاء نسخة من الكائن لن تتمكن من الوصول الى الدالة المغلفة وسيظهر خطا يفيد بانها غير موجودة في حالة محاولة الوصول اليها عن طريق كتابة اسم المتغير الذي يخزن نسخة من الكائن ثم نقطة ثم اسم الدالة اليك مثال لكي تفهم بشكل افضل
انشاء_كائن_باسم شخص :
انشاء_دالة_باسم __اكتب(هذا_الكائن) :
اكتب("مرحبا")
خالد = شخض()
خالد.__اكتب()
هنا سيحدث خطأ يفيد بان الدالة __اكتب غير موجودة ولجعل اي دالة او متغير غير قابل للوصول يجب وضع علامتي _ قبل اسم الدالة او المتغير وعدم اضافة _ في اي مكان اخر في الاسم (فقط شرطتين في بداية الاسم)
يقصد بها نقل جميع الخواص و الدوال الموجودة في كائن معين الى كائن اخر فعندما نقول ان كائنا يرث من كائن اخر اي انه يملك كل خواص ودوال الكائن الاخر مع بعض الدوال والخواص الاضافية اليك مثال لكي تفهم بشكل افضل
انشاء_كائن_باسم شخص() :
الاسم = ""
انشاء_دالة_باسم قل_الاسم(هذا_الكائن) :
اكتب(هذا_الكائن.الاسم)
انشاء_كائن_باسم رجل(شخص) :
الجنس = "ذكر"
خالد = رجل()
خالد.الاسم = "خالد محمد"
خالد.قل_الاسم()
حيث نلاحظ ان رجل لا يملك الاسم و قل_الاسم بل ورثهما من شخص حيث لجعل كائن يرث من كائن اخر نكتب اسم الكائن ضمن الاقواس
انشاء_كائن_باسم رجل(شخص) :
كما ان عربي بلس تمتلك ميزة قوية جدا غير موجودة في كبرى لغات البرمجة مثل جافا وهي انه يمكنك جعل كائن يرث من اكثر من كائن اخر
انشاء_كائن_باسم رجل(شخص , عمل) :
في بعض الاحيان يوجد لدينا كائن يرث من كائن اخر ويوجد لدينا في الكائن المورث دالة اسمها قل وفي الكائن الوارث يوجد لدينا ايضا دالة اسمها قل كيف يمكن التفريق بينهم ؟ اليك مثال لتفهم كيفية عمل ذلك
انشاء_كائن_باسم شخص() :
انشاء_دالة_باسم قل(هذا_الكائن) :
اكتب("مرحبا")
انشاء_كائن_باسم رجل(شخص) :
انشاء_دالة_باسم قل(هذا_الكائن) :
اكتب("اهلا")
انشاء_دالة_باسم ابدأ(هذا_الكائن) :
هذا_الكائن.قل() # الكائن رجل سيتم تنفيذ الدالة الموجودة في
الكائن_الاب().قل() # الكائن شخص سيتم تنفيذ الدالة الموجودة في
حيث لاستدعاء شيء من الكائن الذي نعمل عليه نكتب هذا_الكائن ثم نقطة ثم اسم الشيئ
ولاستدعاء شيء من الكائن المورث نكتب الكائن_الاب() ثم نقطة ثم اسم الشيئ
اليك هذه المسألة : قم بانشاء نوع متغيرات جديد لتخزين القوائم مثل القوائم العادية ولكن ليمكن تخزين فيه غير الارقام الصحيحة فقط
انشاء_كائن_باسم قائمة_ارقام( قائمة ) :
انشاء_دالة_باسم اضافة(هذا_الكائن , عنصر) :
اذا_كان نوع(عنصر) == "ارقام صحيحة" :
اضافة_الى_القائمة(القائمة = الكائن_الاب() , العنصر = عنصر)
غير_ذلك :
اظهار_الخطأ خطا_في_بنية_الجملة
ن =قائمة_ارقام()
ن.اضافة(1)
ن.اضافة(2)
نفذ_على_كل_عناصر ن:
اكتب(__عنصر__)
حيث قمنا بانشاء كائن يرث من القوائم في بايثون (حيث يمكن الوراثة من انواع البيانات في بايثون) ثم قمنا بانشاء دالة لاضافة عنصر ، وتتحقق من نوعه عبر الدالة نوع (سبق شرحها ) و في حالة كان من الارقام الصحيحة سيتم اضافته وغير ذلك لن يتم اضافته
حيث يمكن عمل حلقة تكرارية على المتغير من هذا النوع الجديد بكل سهولة
هو مفهوم فلسفي بسيط ونقصد فيه انه اذا كان لديك اكثر من كائن يشتركون في الوظيفة (مثلا كائن يمثل زر ، وكائن يمثل نافذة ، وكائن يمثل مربع كتابة) يفضل ان تقوم بتوحيد اسماء الخواص والدوال بينهم حتى يسهل عليك العمل عليهم واستخدامهم فيما بعد
هنا سأقدم لك معظم اسماء المصطلحات في البرمجة الكائنية التوجه مع معناها بالعربية
المعنى | المصطلح |
---|---|
encapsulation | التغليف |
class object | يقصد فيه نسخة من الكائن اي متغير جديد يخزن الكائن |
constructor class | يقصد فيه الدالة __بناء__ |
Attribute | يقصد فيه احد خواص (متغيرات) الكائن |
Sub Class | يقصد فيه كائن يرث من كائن اخر |
super Class | يقصد فيه كائن اساسي ترث منه كائنات اخرى |
inheritance | يقصد بها الوراثة بين الكائنات |
multi inheritance | يقصد بها الوراثة المتعددة (الوراثة من اكثر من كائن) |