# برمجة غرضية التوجه

**البرمجة غرضية التوجيه** أو **شيئية المنحى** (الإنجليزية: *Object-oriented programming - OOP*) ويطلق عليها ايضًا **برمجة موجهة نحو الكائنات** (أو نحو العناصر) وهي نمط برمجة متقدم، وفيه يقسم البرنامج إلى وحدات تسمى الكائنات (Objects)، كل كائن هو حزمة (تعليب) من البيانات (المتغيرات والثوابت) والطرق ووحدات التنظيم وواجهات الاستخدام. ويُبنى البرنامج بواسطة استخدام الكائنات وربطها مع بعضها البعض وواجهة البرنامج الخارجية باستخدام هيكلية البرنامج وواجهات الاستخدام الخاصة بكل كائن. من مميزات البرمجة الشيئية أنها تسمح بإعادة الاستخدام للأكواد البرمجية التي اُخْتُبِرَت وذلك باستدعائها في البرامج الأخرى دون إعادة برمجتها. إعادة الاستخدام يسهل بناء البرامج بشكل سريع في وقت قصير.

## أساليب كائنية المنحى

الأساليب كائنية المنحى هي تصميم وتقنية البرمجة التي تستخدم مفهوم الطبقة والكائن. وتستند كائنية المنحى على البرمجة الحقيقية على تحديد الفئات التي تمثل كائنات ذات خصائص محددة جيدا وظيفة. وتشمل كائنية المنحى نماذج ثلاثة مبادئ رئيسة وهي:

1. التغليف (Encapsulation).
2. إخفاء البيانات (Data Hiding).
3. الوراثة (Inheritance).
4. تعدد الأشكال.

التطبيقات التي تقوم على أساليب كائنية المنحى وبرامج الحاسوب التي تتكون من الطبقات مع تفاعلاتها:
يوجد العديد ومن لغات البرمجة الحديثة التي تدعم أساليب كائنية المنحى، ومن أهم هذه اللغات لغة جافا حيث تدعمها بشكل كامل.

## الأصناف والكائنات

يمثل الصنف مفهوم واحد مثل هذا الكائن (Object)، حيث تمثل الصنف مجموعة «أصناف» من الأشياء التي وصفتها بعض البيانات، ولها نفس السلوكيات «الأنشطة». تعد وتخدم الصنف كمخطط لكائن. على سبيل المثال لدينا صنف الطالب تحدد خصائص من كائناتها مثل الاسم والعنوان والتخصص، والمعدل التراكمي عن البيانات وتحديث عنوان أو إعادة حساب المعدل التراكمي عن أساليب أو أنشطة كل كائن من نوع الصنف التي يستطيع الطالب تنفيذه أو يجب تحقيقه. الكائن من هذا النوع يمكن أن يكون أي صنف الطالب الفردية في الجامعة. يمكن أن نفكر في أمثلة أخرى كثيرة مثل صنف السيارات، طبقة الطائرة، صنف الثدييات، وحلقت صنف الحيوان، وطبقة الأثاث، وأمثلة أخرى كثيرة.
وبالتالي، لكي نعرف الصنف نحتاج لإعلان البيانات والأساليب التي ينبغي أن يكون كل كائن من هذا النوع. وأعلن كل بند البيانات سواء كان متغير أو ثابت، ولكل نشاط (وظيفة) يجب أن تكون ممثلة من قبل وسائل أحد أو أكثر. من الطبقة يمكننا تمثيل، الكائنات النشطة التي لها نفس المحتويات أي متغيرات البيانات والأساليب. يجب على كل كائن تعيين قيم لمتغيرات البيانات لديه. هذه القيم تعمل على تحديد حالة كائن تم إنشاؤه من الصنف. الأساليب التي عُرِّفَت في الصنف تمثل سلوك الكائن. وفقا لذلك، في حين أن الصنف لديها البيانات والأساليب.
إنشاء كائن يسمى مثيل. الكائن هو مثيل لصنف معين، ونحن نستطيع إنشاء مثيل للعديد من الكائنات كما أننا بحاجة لأي برنامج معين. على سبيل المثال، فإن الكائن من صنف الطلاب التي يمكن إنشاء مثيل لها التي هي البيانات الفعلية «القيم» من اسم الطالب وعنوانه والتخصص، والمعدل التراكمي، ولها السلوكيات التي هي أساليب محددة في فئتها.

### أسماء عربية أخرى

* برمجة كينونية
* برمجة شيئية المنحى.
* برمجة موجهة
* برمجة كائنية
* برمجة كائنية التوجه
* برمجة غرضية التوجه
* برمجة كائنية المنحى
* برمجة بالعناصر
* برمجة موجهة نحو الكائنات (أو العناصر)
* البرمجة بالكائنات

البرمجة الكائنية عبارة عن **نمط برمجة** متخصص في المفاهيم التالية:

* **صنف** وهو نموذج الوحدة الرئيسة لبناء الـكائن (Object) بمعنى أنه يُكَوَّن أكثر من كائن على أساس نموذج البناء الأساسي وهو الصنف، ويمكن تشبيه الصنف بالقالب الذي يقوم بتشكيل الكائن ويمكن بعد ذلك استخدام هذا الكائن لأي غرض مطلوب.
* **الكائنات Objects** - حزم وتعليب البيانات والطرق الوظيفية معاً في وحدات تعمل ضمن برنامج نشط. الكائنات هي أساس هيكلية برمجة الحاسوب الكائنيّة.
* **المثيل** وهو شكل الصنف أو كائن محدد والذي ينشأ في وضع التشغيل، وبشكل آخر يمكن أن نسمي الصنف في وضع التشغيل (نموذج).
* **التجريد Abstraction** - قدرة البرنامج على تجاهل بعض واجهات المعلومات المتلاعبة، أي التركيز على المفهوم الأساسي للكائن وهيكليته النظرية وتجريده من طريقة العمل النهائية والتوجهات الخارجية.
* **التغليف Encapsulation** - التأكد أن المستخدم لا يستطيع أن يغير البيانات الداخلية لكائن بطريقة مفاجئة، فقط طرق الكائن الداخلية يسمح لها بتعديل حالة الكائن وبياناته. أي أنه لا يمكن التلاعب بالكائن وتغير معلوماته بأي طريقة بل أن هناك واجهة استخدام خاصة يضعها المبرمج ومن خلالها يمكن تغيير بيانات الكائن الداخلية وحالته.
* **تعدد الأوجه Polymorphism** - بدلاً من استدعاء الإجراءات الفرعية مباشرة، تستطيع البرمجة الشيئية إرسال رسائل، الإجراء المعين الذي يُنَادَى نتيجة الرسالة يعتمد على نوع الكائن الذي أُرسل له. أي أنه باستخدام نفس اسم الاستدعاء يمكن استدعاء إجراءات وطرق مختلفة اعتماداً على نوع الكائن.
* **الوراثة** - يستطيع الكائن وراثة خصائص كائن معين والزيادة عليها دون أن يتأثر الكائن الأصلي. فقد يكون هناك كائن «مركبة» فيه الخصائص العامة لكل المركبات مثل الاسم واللون ورقم التسجيل، الكائن «الطائرة» ممكن أن يرث الكائن «مركبة» ويضيف عليه خصائص «الطائرة»، كذلك يمكن أن يكون هناك مثلاً كائن «مربع» فيه خصائص الطول والعرض ويمكن للكائن «مكعب» أن يرث من «المربع» ويضيف عليه خصائص العمق والحجم.

مثال على تعددية الأوجه: إذا افترضنا أن المتغير «مركبة» يشير إلى كائن إما أن يكون «سيارة» أو «سفينة» أو «طائرة». فإذا أردنا في المثال للطائرة أن تطير وللسيارة أن تمشي وللسفينة أن تبحر فعلينا أولاً معرفة نوع الكائن ثم إعطاء الأمر؛ أي إذا كان «مركبة» هو كائن من نوع «سفينة» فالمركبة يجب أن تبحر، ولكن مع تعددية الأوجه يمكننا أن ننشئ طريقة واحدة في كل كائن اسمها «تحرك» (الطريقة «تحرك» في «السفينة» تقوم بالأبحار والطريقة «تحرك» في «الطائرة» تقوم بالطيران .. إلخ). الآن لا يجب علينا أن نعرف نوع الكائن فكل ما علينا فعله هو استدعاء الطريقة «تحرك» للمركبة، هذا سيقوم باستدعاء طريقة «تحرك» الخاصة بالكائن الحالي فإذا كان الكائن «سفينة» فهذا يعني أن الطريقة «تحرك» الخاصة بالسفينة ستُسْدَعى والتي ستقوم بأبحار «السفينة».

من أحدث أساليب هندسة البرامج ما يعرف بالطريقة الموجهة للكائنات: تعد «الطريقة الموجهة للكائنات» من الأساليب الجديدة في تطوير النظم وهو أسلوب التحليل والتصميم الكائني التوجه، حيث يقوم هذا الأسلوب بدمج البيانات والعمليات في بيئة واحدة تسمى كائن، ويمثل الكائن عادة الأشياء الواقعية التي يعالجها نظام المعلومات مثل الزبائن والمزودين والعقود واتفاقيات الإيجار.

## من اللغات التي تعمل بالكائنية

* لغة سي++
* لغة جافا
* لغة بايثون
* لغة دلفي (لغة برمجة)
* لغة سي شارب
* لغة الجافا سكربت
* لغة php
* لغة Dart
* لغة سكالا
* لغة فيجوال بيسك
* لغة روبي
* لغة سويفت

## انظر أيضًا

* طريقة برمجية
* هندسة البرمجيات بالمكونات
* تصميم بالعقود
* قاعدة البيانات الكائنية
* Object-relational impedance mismatch (and The Third Manifesto)
* مخطط الكائن العلائقية ‏

### الأنظمة

* كوربا (CORBA)

### لغات النمذجة

* لغة النمذجة الموحدة

## المراجع