مفهوم – مقدمه عن برمجة الكائنات ( Object Oriented ) :
برمجة الكائنات نعني بها , الوصول بالبرمجه الى محاكاة الواقعيه, كثير من البرامج التي لا تدعم الكائنات يصعب فهم كودها, ولكن مع هذه الطريقه, يوجد لدينا طريق نحاكي به الواقع, لو فكرت قليلا وسألت نفسك, كيف يمكنني ان اقوم بمحاكاة سيارة , طائره , انسان وغيرها, صدقني سيصعب عليك ذلك من غير هذا المبدأ ولكن اذا استخدمت برمجة الكائنات فيسهل عليك فعل كل شي محاكي للواقع تريده, فمثلا لو قلنا ان لدينا تصنيف ( Class ) اسمه بشر , اكيد ان هذا البشر لديه خواص ( attributes ) فهو ينتمي الى نوع وهو ذكر او انثى, لديه اسم , لديه عمر , لديه لون بشره , لديه طول , لديه وزن وهكذا, ولديه عمليات ( operations ) يقوم بها كالنوم والاستيقاظ, والافطار, تخيل انك تقوم بفعل هذا كله بالبرمجه ؟؟؟ ماهو الاسهل بالنسبه لك الطريقه المعتاده من كتابة الاكواد , او الطريقه الجديده التي سنتعلمها بعد قليل 🙂 . وايضا نستطيه استخدام هذا المبدأ للاشياء المبدئيه, كالملفات مثلا , فيوجد لدينا ملف , ولديه اسم ولديه حجم , ولديه نوع وغير ذلك.
كثير من لغات البرمجه الحديثه تدعم مبدأ ( Object Oriented ), وتعتبر التي لا تدعمها ضعيفه, فأصبح كل شي في هذه الايام يعتمد على هذا المبدأ, فهو اسرع , اسهل , اكثر حمايه من الكود العادي, وبعض اللغات يطلب منها ويلزم عليها ان تكون مبنيه على هذا المبدأ. ومن وجهة نظري انا, اعتقد ان البرنامج الذي لا يستخدم هذا المبدأ لن يكون جيدا , ( ليس في كل الحالات ).
من اعظم فوائد مبدأ ( Object Oriented ) دعم والتشجيع على مبدأ ( Encapsulation ) ونعني به ( اخفاء المعلومات ), حيث اننا لا نستطيع التحكم في الخواص او المعاملات الا عن طريق الكائن, ومانسميه بواجهة الكائن. حى لو اردنا تغير نوع او اصلاح او اضافة اي شيئ, فسوف نرجع الى التصنيف الاساسي , ولن تطرق الى تعديل جميع اكوادنا. ويمكننا انشاء اكثر من ( Object ) من هذا التصنيف, حيث كل واحد منهم منفصل عن الاخر, فتخيل لدينا التصنيف الاول ( البشر ) فنستطيع انشاء عدة كائنات منه , واحد اسمه محمد ولديه خواص معينه , والاخر اسمه نوال ولديه خواص ومعاملات اخرى, ولا يعني انهم واحد, فكل واحد منهم منفصل على الاخر, ولديه تحكمات وخواص خاصه به.
مبدأ التعدديه ( Polymorphism ) :
بحثت في كثير من المعجمات والتراجم عن معنى هذه الكلمه بالعربيه ولم اجد, ولكن قرأت كتابا يقول عنها ( Different Classes have different behaviors for the same operations ) ومعنى ذلك باللغه العربيه, ان تصنيفات مختلفه يكون لديها سلوكات مختلفه لنفس العمليات, معادله رياضيه اليس كذلك ؟ لن تستطيع فهمها بسرعه, يجب ان تأخذ عليها امثله كثيره ليصل المبدأ الى العقل وتقوم بإستيعابه, واترك ذلك علي فسأحاول قدر الامكان ان اقوم بتسهيله لك. لنأخذ مثالا على ذلك, لو عندنا تصنيف سياره وتصنيف دراجه هوائيه, فكل منهما لديه خاصية التحرك ولكن في السياره يجب ان تقوم بالتشغيل, ولكن في الدراجه بطريقه اخرى ولا يوجد لدينا تشغيل, ولكن في لغات البرمجه لا يوجد لدينا هذا الواقع ولا تقوم بمحاكاة الواقع 100%100 فلذلك تحتاج اللغه ( polymorphism ) لكي تعرف اي عمليه تقوم بعملها لاي تصنيف. لنقولها بطريقه واقعيه باستخدام اللغه العربيه, الدراجه تحتاج الى تقوم بصيانتها , صبغها , تنظيفها , تلميعها , ونفس الشيئ السياره , ولكن اذا قلت اريد ان انظف, فيوجد بعقلك ماهو الشيئ الذي تريد ان تقوم بتنظيفه هل هو سياره او دراجه, هل وصلت الفكره ؟؟
مبدأ الوراثه ( Inheritance ) :
عملية الوراثه سهله, فأنت على سبيل المثال, ورثت صفة الحواجب العريضه من الاب, و الانف المعتدل من الام وغير ذلك, ولكن لديك اشياء وخواص خاصه بك لا توجد في الاب و الام اليس ذلك صحيحا ؟ نفس الشيئ هنا, لنضرب مثالا على ذلك , لدينا شركة سيارات, تقوم ببيع سيارات على عدة انواع ( رياضيه , عائليه , جيب ) , كل منهم لديهم خواص متماثله , كل سياره لها لون, كل سياره لها 4 عجلات, وغيرها, ولكن كل نوع لديه بعض الخصائص لا توجد في الاخرى, الرياضيه مقعدان فقط, الجيب 7 مقاعد , العائليه 5 مقاعد. في مبدا الكائنات نقوم بعملها كالتالي, ننشئ تصنيف اسمه سياره, وثلاث تصنيفات اخرى ونجعلها تورث الصفات من التصنيف سياره, هل وضحت الصوره ؟ انظر المثال التالي: