البرمجة الموجهة للكائنات Object-Oriented Programming
ما هي البرمجة الموجهة للكائنات (Object-Oriented Programming - OOP) ..؟؟! ما أهمية البرمجة الموجهة للكائنات (OOP) في تطوير البرمجيات...؟؟!!. ما هي عناصر البرمجة الموجهة للكائنات OOP ..؟!!! و ما المفاهيم الأساسية للبرمجة الموجهة للكائنات OOP ..؟! ما هي لغات البرمجة التي تدعم البرمجة الموجهة للكائنات OOP..؟؟!!
البرمجة الموجهة للكائنات (Object-Oriented Programming - OOP) هي نهج قوي وشائع في تطوير البرمجيات يركز على تنظيم البرامج حول الكائنات والتفاعلات بينها. وتسمح البرمجة الموجهة للكائنات (Object-Oriented Programming - OOP) للمطورين بتمثيل العالم الحقيقي أو المشكلات المعقدة بشكل أفضل وتوفر أسلوبًا هيكليًا ومنهجيًا لتصميم وتنفيذ التطبيقات. في هذا المقال نتكلم عن البرمجة الموجهة للكائنات (OOP) من حيث المفاهيم و الأهمية ولغات البرمجة الداعمة لهذا النهج .لنبدأ….
في هذا المقال نتعرف على:
- ماهو مفهوم الـ OOP؟
- مميزات الـ OOP.
- عناصر البرمجة الموجهة للكائنات OOP.
- مفاهيم الـ OOP.
- أهمية البرمجة الموجهة للكائنات في تطوير البرمجيات.
- لغات البرمجة والبرمجة الموجهة الكائنات OOP .
ماهو مفهوم الـ OOP؟
مفهوم الـ OOP وهو اختصار يعني البرمجة الموجهة للكائنات (Object-Oriented Programming - OOP) أوتسمى برمجة الكائنات الموجهة أو البرمجة الكائنية أو البرمجة الشيئية ، ويعني نهج برمجي يرتكز على تمثيل البيانات والمفاهيم في العالم الحقيقي ككائنات ( Objects) .
يمكن تعريف البرمجة الموجهة للكائنات (Object-Oriented Programming - OOP) أيضاً أنها النهج البرمجي يرتكز على تصميم التطبيق بشكل كائني حيث تستخدم الفئات Classes و الكائنات Objects لتمثيل العناصر في التطبيق.
يعتمد نهج البرمجة الموجهة للكائنات OOP في بناء التطبيقات أولاً على بناء فئات Classes يكون لها سمات Attributes أو خصائص Properties ومجموعة دوال Functions قد تُسمى Methods . ثم على إنشاء Objects لهذه الفئات Classes للتمثيل قيم البيانات.بمعنى الـ Object هو نسخة Class معين بقيم حقيقة.
و الكائنات Objects هي وحدات مستقلة يمكنها تخزين البيانات وتنفيذ الإجراءات. ترتبط الكائنات ببعضها البعض من خلال العلاقات، مما يسمح بإنشاء نماذج قوية وموثوقة للعالم الحقيقي.
ويوضح الشكل التالي مثال مبسط على مفهومي الـ CLass والـ Object :
مميزات البرمجة الموجهة للكائنات OOP
تتمتع البرمجة الموجهة للكائنات OOP بالعديد من المزايا و منها :
- توفير بنية واضحة للبرامج : فمنهجية البرمجة الموجهة بالكائنات OOP سهلة الفهم فيمكن فهم الـ Class بسهولة من قبل المبرمجين الآخرين.
- التنظيم والهيكلة: يسمح البرمجة الكائنية OOP بتنظيم الكود بشكل هيكلي ومنطقي. يمكن تجزئة البرنامج إلى Classes فرعية وحدات صغيرة قابلة للإدارة.
- إعادة الاستخدام: يمكن إعادة استخدام الـ Class والكود المرتبط به في عدة مواقع دون الحاجة إلى إعادة كتابة الكود من الصفر. مما يوفر الوقت والجهد ويساهم في تحسين صيانة البرامج.
- سرعة سهولة التنفيذ.فهي تمتلك :
- سهولة في المراجعة و الصيانة: يمكن إعادة استخدام الـ CLass بسهولة في مشاريع مختلفة.
- سهولة التوسيع: بحيث يمكن إضافة ميزات جديدة إلى الـ CLass بسهولة.
- سهولة الاختبار: فيمكن اختبار الـ CLass بسهولة.
تعمل البرمجة الموجهة للكائنات OOP على مبدأ (DRY -Don't Repeat Yourself) وهذا يعني بالمحافظة على عدم تكرار الكود مما يجعل من السهل تعديل الكود او اصلاح الاخطاء. و إمكانية إنشاء تطبيقات كاملة قابلة لإعادة الاستخدام مع كود أقل ووقت تطوير أقصر.
- شائعة الاستخدام : تستخدم البرمجة الموجهة للكائنات على نطاق واسع في تطوير البرامج الحديثة. بعض من أشهر لغات البرمجة الموجهة للكائنات هي جافا، سي++، وبايثون.
باستخدام البرمجة الموجهة للكائنات OOP، يمكن للمطورين بناء تطبيقات قوية وقابلة للتطوير بسهولة. يتيح لهم هذا النهج تجزئة البرنامج إلى وحدات صغيرة ومستقلة تتفاعل مع بعضها البعض. بالإضافة إلى ذلك، يسهل إعادة استخدام الكود وتوسيع البرامج بإضافة صفحات جديدة أو تغيير الصفحات الموجودة.
عناصر البرمجة الموجهة للكائنات OOP
تستخدم بعض عناصر البرمجة مع البرمجة الموجهة للكائنات (Object-Oriented Programming - OOP) مثل Class و Object ، فيما يلي شرح لهذه العناصر:
الفئة Class
الفئة Class في البرمجة الكائنية (OOP) عبارة عن مخطط أو نموذج أولي محدد من قبل المستخدم يتم إنشاء الكائنات(Objects) منه. وهو يمثل مجموعة الخصائص (Properties) أو الوظائف (Methods) المشتركة بين جميع الكائنات من نوع واحد. باستخدام الفئات (Classes)، يمكننا إنشاء كائنات متعددة لها نفس السلوك بدلاً من كتابة التعليمات البرمجية الخاصة بها عدة مرات.
ويتكون بيان تعريف الـ Class من :
- الصفة التعريفية (Modifiers): تحدد الصفات التعريفية صلاحية الوصول للـ Class فيمكن ان تكون صلاحية الوصول عامة (public) وهو الإفتراضي، أو خاصة (private ).
- اسم الفئة (Classname): يجب ان يكون يكون اسم الفئة الـ Class فريد، ومن المتعارف عليه ان يبدأ اسم الـ Class بحرف كبير.
- الفئة المورثة (Superclass ) (إن وجدت): في حال أردنا إنشاء Class يرث من Class آخر فيجب ذكر اسم الـ Class الأصل (الأب ) .
- الواجهات Interfaces (إن وجدت): تدعم بعض لغات البرمجة عمل الوجهات مع الـ Classes و يمكن أن ينفذ الـ Class اكثر من واجهة Interface ففي حال وجود واجهات مع الـ Class تذكر في تعريف الـ Class ويفصل بينها بفواصل.
الكائن Object
الكائن (Object) هو الوحدة الأساسية للبرمجة الشيئية (OOP) التي تمثل كيانات الحياة الواقعية. يمكن للبرنامج إنشاء العديد من الكائنات، والتي تتفاعل عن طريق استدعاء الوظائف (Methods). الكائنات (Objects) هي التي تقوم بتنفيذ التعليمات البرمجية الخاصة بنا، وهي جزء من التعليمات البرمجية المرئية والمشاهدة للمستخدم (viewer/user). ويتكون الكائن (Object) من :
- الهوية (Identity) : وهي أن يكون للـ Object اسم فريد، فلا يمكن أن يكون لأكثر من Object نفس الاسم في البرنامج الواحد وهذا لأن كائنات البرنامج الواحد تتصل و تتفاعل فيما بينها. فلابد أن يكون لكل منها اسم مميز.
- الحالة (State): وتصف الحالة للكائن Object بواسطة الخصائص (Properties ) الخاصة به.
- السلوك(Behavior): وهو وصف سلوك الكائن (Object ) من خلال وظائف التي يمكنه القيام بها (Methods) واستجابته للتفاعلات مع الكائنات الأخرى .
- الوظيفة (Method) : يؤدي الكائن عدد من الوظائف والوظيفة أو الدالة هي عبارة عن مجموعة من التعليمات التي تؤدي بعض المهام المحددة و تعيد النتيجة . يمكن للدوال تنفيذ بعض المهام المحددة دون إرجاع أي شيء. وتصف هذه الوظائف التي يمكن للكائنات تنفيذها سلوك الكائن.
العلاقات Relations
وهي العلاقات التي تبنى بين فئات (Classes) البرنامج الواحد وتربط بيانات الـ Objects للـ Classes المختلفة عبرها.
ويعطي الشكل التالي مثال على تصميم الـ Classes لنظام إدارة طلبات وحجوزات مطعم بواسطة نموذج للـ Class diagram، ويوضح الشكل مكونا الـ Class والعلاقات بين الـ Classes .
مبادئ ومفاهيم البرمجة الموجهة للكائنات OOP
يعتمد العمل بالبرمجة الموجهة بالكائنات OOP على إدراك وفهم عدد من المبادئ و المفاهيم التي تعتبر بمثابة ركائز الـ OOP، مثل التغليف (Encapsulation ) و التوريث (Inheritance ) وتعدد الأشكال (Polymorphism ) و التجريد (Abstraction )، فيما يلي شرح مبسط لكل منها:
التغليف Encapsulation
التغليف (Encapsulation ) يتم تعريفه على أنه التفاف البيانات تحت وحدة واحدة. إنها الآلية التي تربط الكود والبيانات التي يعالجها. ويمكن تعريف التغليف بأنه درع وقائي يمنع الوصول إلى البيانات من الكود الموجود خارج هذا الدرع.
التغليف Encapsulation أحد مبادئ البرمجة الموجهة للكائنات OOP ، ويعبر التغليف (Encapsulation )، عن إخفاء المتغيرات أو البيانات الموجودة في Class ما (جعلها خاصة Private-members) عن أي Class أخرى ولا يمكن الوصول إليها إلا من خلال عناصر الـClass العامة (Public-members) . ففي التغليف، يتم إخفاء البيانات الموجودة في الـ Class عن Classes الأخرى، وهو ما يشبه ما يفعله إخفاء البيانات (data-hiding). لذلك، يتم استخدام مصطلحي "Encapsulation" و"data-hiding" بالتبادل.
بمعنى أن التغليف طريقة للتحكم بالوصول الفئات Classes وتعني التحكم بالوصول المباشر إلى الدوال Methods المتغيرات Instance variables الموجودة في الـ Class،يسمح هذا بالتحكم في الوصول إلى البيانات وتنفيذ العمليات المطلوبة فقط. ويمكن تحقيق التغليف من خلال إعلان جميع المتغيرات في الفصل على أنها خاصة ( private ) وكتابة الدوال عامة ( public methods) في الـ Class لتعيين قيم المتغيرات والحصول عليها.
ويوضح الشكل التالي صلاحية الوصول (Access Modifier) لعناصر الـ Class بناء على مواقع الـ Classes و علاقتها ببعضها :
الوراثة Inheritance
تعد الوراثة أحد المبادئ المهمة في البرمجة الموجهة للكائنات OOP . إنها الآلية التي يُسمح من خلالها لفئة (Class) واحدة أن ترث الميزات (Properties و Methods) لفئة (Class) أخرى. حيث تسمح الوارثة بإنشاء Class جديد يستند إلى Class قائم بالفعل. وتتضمن عملية التوريث بعض المصطلحات الهامة المستخدمة بشكل متكرر:
- الفئة الأساسية (Baseclass) : ويُعرف الـ Class التي تم توريث ميزاته باسم الطبقة الفائقة (تُعرف أيضًا Superclass أو الأب parent class).
- الفئة الفرعية (Subclass): ويُعرف الـ Class الذي يرث الفئة (Class) الأخرى بالفئة الفرعية (تُعرف أيضًا باسم الفئة المشتقة derived class أو extended class أو الابن child class). يمكن للفئة الفرعية إضافة Properties و Methods الخاصة بها بالإضافة إلى Properties و Methods الخاصة بـ Baseclass .
وتدعم الوراثة Inheritance مفهوم قابلية إعادة الاستخدام (Reusability)، أي عندما نريد إنشاء فئة (Class) جديدة ويوجد بالفعل فئة تتضمن بعضًا من التعليمات البرمجية التي نريدها، يمكننا اشتقاق الفئة الجديدة من الفئة الموجودة. بهذا فإننا نعيد استخدام الكود الخاص بالفئة الموجودة.
بإختصار وتعني الوراثة بين الـ Classes أي كل class فرعي Subclass يرث كل عناصر الـ Baseclass ، أي يتم نقل الخصائص (Properties ) والوظائف (Methods ) من الـ Class الأساسي Baseclass إلى الـ Class الفرعي Subclass.أي أن الوارثة تنظيم الـ Classes بشكل هيكلي.
تعدد الأشكال Polymorphism
تسمى القدرة على الظهور بأشكال عديدة بتعدد الأشكال (Polymorphism ) ويشير إلى قدرة لغات البرمجة الموجهة للكائنات OOP على التمييز بين الكيانات التي لها نفس الاسم بكفاءة. حيث يسمح تعدد الأشكال للكائنات لكائن من نوع واحد أن تتصرف بطرق مختلفة اعتمادًا على السياق.
ويتم تحقيق Polymorphism من خلال استخدام الوظائف المتعددة (المصفوفات الافتراضية) والاستنساخ الزائد (Overloading) والاستمالة (Overriding).
التجريد Abstraction
تجريد البيانات (Data Abstraction ) هي الخاصية التي بموجبها يتم عرض الوحدات الأساسية فقط للمستخدم. لا يتم عرض تفاصيل الوحدات أو غير الأساسية للمستخدم.
ومفهوم التجريد في البرمجة الموجهة للكائنات OOP يُعرف على أنه عملية تحديد الخصائص المطلوبة لكائن ما فقط، وتجاهل التفاصيل غير ذات الصلة. أي لكل Class خصائص ووظائف التي تميزه عن الكائنات الأخرى من نفس النوع وتساعد أيضًا في تصنيف/تجميع الكائن.و مثال على التجريد أن تحتوي الدالة المجردة على إعلان الدالة فقط بدون كود.
أهمية البرمجة الموجهة للكائنات في تطوير البرمجيات
البرمجة الموجهة للكائنات (OOP) لها أهمية كبيرة في تطوير البرمجيات، وتعتبر منهجية شائعة ومستخدمة على نطاق واسع في صناعة تكنولوجيا المعلومات. و الفائدة من OOP يمكن أن تتلخص في :
- التنظيم والهيكلة (Organization and Structure): تُسهِّل البرمجة الموجهة للكائنات (OOP) تنظيم البرامج وصيانتها بشكل أفضل. يتم تجزئة البرنامج إلى Classes منفصلة تتفاعل مع بعضها البعض لتحقيق وظائف محددة. هذا يجعل الكود أكثر قابلية للفهم والصيانة ويساعد في تقليل التداخل بين الأجزاء المختلفة من البرنامج.
- التعامل مع التعقيد (Handling Complexity): تتيح البرمجة الموجهة للكائنات (OOP) التعامل مع النماذج المعقدة والمشاريع الكبيرة بشكل أكثر سهولة. يمكن تجزئة المشكلة إلى Classes صغيرة وإدارتها بشكل منفصل. هذا يجعل التنمية والصيانة أكثر فعالية ويسهم في تحسين إدارة المشاريع.
- إعادة الاستخدام (Reusability): تسمح البرمجة الموجهة للكائنات (OOP) بإعادة استخدام الكود بسهولة. يمكن تصميم Class أو Object واحد واستخدامه في عدة مشاريع أو في أجزاء مختلفة من نفس المشروع. هذا يوفر الوقت والجهد في تطوير البرمجيات ويسهم في زيادة الإنتاجية.
- التواصل والتفاعل (Communication and Interaction): تسهل البرمجة الموجهة للكائنات OOP التواصل والتفاعل بين الأعضاء المختلفة في فريق التطوير. يمكن لل للـ Classes أن تتفاعل مع بعضها البعض عن طريق استدعاء الدوال (الوظائف ) وتبادل البيانات. هذا يسهل التعاون والتنسيق بين أعضاء الفريق ويزيد من كفاءة تطوير البرمجيات.
- التوسعية والصيانة (Scalability and Maintenance): توفر البرمجة الموجهة للكائنات OOP تصميمًا قابلاً للتوسع والصيانة. يمكن إضافة وحذف الـ Classes و الكائنات(Objects) بسهولة، ويمكن تعديل وتطوير الوظائف والخصائص بشكل منفصل دون التأثير على أجزاء أخرى من البرنامج. هذا يسهم في تحسين قدرة البرنامج على التكيف مع متطلبات جديدة وتسهيل عمليات الصيانة المستقبلية.
لغات البرمجة والبرمجة الموجهة الكائنات OOP
تدعم عدد من لغات البرمجة أسلوب البرمجة الموجهة للكائنات (Object-Oriented Programming - OOP) OOP مثل: , Java وC# هنا بعض الأمثلة على لغات برمجة التي تدعم OOP :
- Java: تُعتبر Java واحدة من أبرز اللغات التي تدعم البرمجة الموجهة للكائنات. يمكن تعريف الكائنات والوظائف والتفاعلات بينها في Java. تعتبر Java شائعة جدًا في تطوير تطبيقات الويب والهواتف المحمولة والأنظمة المبنية على الشبكات.
- C++ تعتبر C++ لغة برمجة متعددة الاستخدامات وتدعم البرمجة الموجهة للكائنات. توفر C++ ميزات قوية لإنشاء الكائنات والتعامل معها مثل التراث والتعددية والاستبدال. تستخدم في تطوير أنظمة التشغيل والألعاب والتطبيقات المدمجة.
- C# : تعتبر C# (C Sharp) لغة برمجة تابعة لمايكروسوفت وتدعم البرمجة الموجهة للكائنات. تستخدم C# في تطوير تطبيقات سطح المكتب وتطبيقات الويب وتطبيقات الألعاب التي تستهدف بيئة تشغيل .NET .
- Ruby: تدعم Ruby أيضًا البرمجة الموجهة للكائنات. يمكن إنشاء الكائنات وتعريف الوظائف والخصائص بسهولة باستخدام Ruby. تستخدم Ruby في تطوير تطبيقات الويب وتعتبر لغة برمجة مفتوحة المصدر وسهلة التعلم.
هذه مجرد بعض الأمثلة على لغات البرمجة التي تدعم البرمجة الموجهة للكائنات OOP. وهناك المزيد من اللغات التي تعتمد هذه المنهجية، مثل PHP، Swift، Kotlin،Python, JavaScript وغيرها.
تعد البرمجة الموجه للكائنات OOP أحد أهم المفاهيم في عالم البرمجة حالياً، حيث يساعد في تصميم برامج أكثر قابلية للصيانة والتطوير والتوسع. فهو يسمح للمبرمج بتعريف الكائنات وخصائصها وسلوكياتها، مما يجعل الكود أكثر انضباطاً وفهماً. كما أن استخدام مفاهيم الوراثة والتجريد تتيح إمكانية إعادة استخدام الكود بسهولة، مما يقلل من الجهد والوقت المبذول في تطوير المشاريع. كل هذا يجعل من نموذج OOP أساساً مهماً يجب أن يتقنه أي مبرمج حديث.
الى هنا ينتهي هذا المقال الذي تعرفنا فيه على أسلوب برمجة يعد من أقوى أساليب البرمجة وأكثرها شيوعاً، وهو البرمجة الموجهة للكائنات (Object-Oriented Programming - OOP)، بواسطة هذا المقال تعرفنا على مفهوم الـ OOP و عناصر البرمجة الموجهة للكائنات OOP والمفاهيم المرتبطة البرمجة الموجهة للكائنات OOP، كما تطرقنا في المقال الى أهمية البرمجة الموجهة للكائنات في تطوير البرمجيات و أهم لغات البرمجة التي تدعم البرمجة الموجهة بالكائنات OOP.