بسم الله الرحمن الرحيم

مدخل إلى البرمجة الشيئية أو الكائنية التوجّه Object Oriented Programming
خلال الأسطر القليلة التالية، سنلقي الضوء على مفهوم البرمجة الكائنية أو الشيئة Object Oriented Programming وهي ما يطلق عليه اختصاراً OOP، ماهيتها ومميزاتها.

فكّر بالكائنات Think about Objects:

ستتعرف في هذا الجزء على أهم المصطلحات المستخدمة في الـOOP كما ستفهم فكرة الـOOP إن شاء الله!
لو نظرنا حولنا في عالمنا الحقيقي لوجدنا جميع ما يحيط بنا عبارة عن "كائنات Objects": الناس، الحيوانات، النباتات، السيارات، الطائرات، البنايات، وحتى الكمبيوترات وغيرها. هذا هو معنى كلمة "كائن Object"، ومن الممكن أن نطلق نفس المصطلح على أي ممثل لأي فئة، فنطلقه على الفراولة لأنها تمثل أحد الفواكة، أو نطلقه مثلاً على الطاووس لأنه يمثل أحد الطيور... وهكذا.
ويمكننا تصنيف الكائنات إلى صنفين:

كائنات نشطة (حية) Animate Objects: وهي التي نحس فيها فنجد لها حركة ونشاط.
كائنات غير نشطة (غير حية) Inanimate Objects: هي التي لا نلاحظ لها نشاط أو حركة أو وقع أينما وجدت.
وجميع الكائنات بصنفيها لها:

خصائص Attribute مثل: الحجم، اللون، الوزن، الشكل...ألخ.
سلوك Behavior فمثلاً: الطفل (كائن) يبكي، وينام، ويمشي، ويأكل (سلوكيات).
الإنسان وخصوصاً المبرمج يتعلم عن الكائنات بمعرفة خصائصها، وملاحظة (تجربة) سلوكها، فمن الممكن أن يكون لكائنات مختلفة نفس الخصائص وسلوك متقارب.

البرمجة الشيئية Object Oriented Programming تقوم بنمذجة Modeling كائنات العالم الحقيقي في برنامج نظير software counterpart. هذا البرنامج يحمل إيجابيات العلاقات بين الفئات classes relationships حيث أن أي كائن من أي فئة يحمل جيمع مميزات وصفات characteristics هذه الفئة أو بالأحرى يرثها لأنه ممثل لفئته. كما أن الفئات الجديدة -تسمى فئة فرعية subclass- ترث صفات الفئات التي أُنتجت وتكونت منها -تسمى الفئة الأم superclass- كما يرث الطفل جينات أبويه. وهذه الفئة الجديدة والتي تعتبر subclass، من الممكن أن تكون superclass لفئات جديدة أخرى ينشئها المبرمج.

الـOOP كذلك تقوم باحتواء البيانات (Data (attributes والطرق (Methods (behavior في حزمة package هي ما نطلق عليه "كائنات Objects"؛ حيث أن بيانات وطرق أي كائن ترتبط ببعضها ارتباط وثيق. هذا الكائن يتميّز بخاصية التخفي Information Hiding نعني بالتخفي هنا أنه بإمكان الكائنات الاتصال والتعامل مع بعضها البعض مع عدم معرفة أحدها كيف تكوّن الآخر! أي أن تفاصيل التكوين هي المخفيّة حتى عن الكائنات نفسها؛ فمن المؤكد أننا نعرف كيف نقود السيارة بكفاءة عالية دون معرفة تفاصيل هندستها. تسمى هذه الخاصية في البرمجة بـAbstraction أي تجريد البيانات.

برامج الجافا جميعها قائمة على برمجة المبرمج لمجموعة فئات خاصة به تسمى user-defined classes باستخدام الفئات والمميزات التي توفرها اللغة ومن ثم استخدام هذه الفئات جميعها أو بعضها في برامجه
حيث أن كل فئة تحتوي على بيانات data ومجموعة دوال functions تقوم بتشكيل هذه البيانات، تسمى البيانات في فئات الجافا بـ: instance variable أو data member. ويطلق على الدوال اسم الطرق methods. فأي طلب لأي فئة معرّفة في اللغة كأنواع البيانات مثل int يسمى "متغير variable"، بينما طلب أي فئة من الفئات التي عرّفها المبرمج user-defined يسمى "كائن object".

البرمجة الشيئية أو الكائنية Object Oriented Programming:

عند حديثنا عن البرمجة الشيئية، نجمل الحديث في كلمتين: الوراثة وتعدد الأشكال Inheritance & Polymorphism، وهما من التقنيات الفعّالة للتعامل مع البرمجيات المعقدّة:

فالوراثة inheritance هي شكل للبرامج software المعدّة للاستعمال مع الفئات classes الحديثة والتي أنشئت من فئات موجودة مسبقاً وأخذت عنها خصائصها وسلوكها وأضافت إليها القدرات التي نحتاج إليها في هذه الفئة الجديدة. الوراثة ماذا تعني عملياً؟! تعني بالضبط ما الذي تم وراثته و كيف يمكن التعديل عليه وما الذي لا يمكن وراثته -يتضح ذلك بالأمثلة-. هذه الخاصية توفر الكثير من الوقت للمبرمج وتقطع عنه أشواطاً في تطوير برنامجه.
وتعدد الأشكال polymorphism يسمح لنا بكتابة برنامجنا في صورة قابلة لتغيير واسع النطاق؛ سواء كان التغيير لفئات موجودة مسبقاً أو تغيير مستقبلي لإنتاج برامج جديدة. هذه الخاصية تسهل علينا توسيع قدرات نظامنا.
وكما ذكرنا في الأعلى أن الفئات الجديدة -تسمى فئة فرعية subclass- ترث صفات الفئات التي أُنتجت وتكونت منها -تسمى الفئة الأم superclass- كما يرث الطفل جينات أبويه. وهذه الفئة الجديدة والتي تعتبر subclass، من الممكن أن تكون superclass لفئات جديدة أخرى ينشئها المبرمج. وهكذا تمتد لدينا سلسلة من الوراثة بين الفئات extends، يحكمها قانون "الوراثة المفردة Single Inheritance" حيث ينص هذا القانون على:
تنشأ أي فئة فرعية من فئة أم واحدة، فالجافا لا تدعم التوارث المتعدد multiple inheritance كالسي++ ولكنها تدعم مفهوم الواجهات Interfaces، فنظام الواجهات يساعد الجافا على تحقيق فائدة التوارث المتعدد مع عدم وجود الأخطاء المترابطة الناتجة عن هذا التوارث المتعدد!

تذكر أن أي كائن ينتمي إلى فئة فرعية فهو ينتمي إلى الفئة الأم لهذه الفئة الفرعية ويحمل خصائصهما وسلوكهما.

وبعد هذه المقدمة وهذا التوصيف لعالم الـOOP نلاحظ أن جُلّ التركيز في هذا النوع من البرمجة يقع على الـفئات Classes، فالمبرمج يستخدم الفئات المبنية مسبقاً في اللغة مع الفئات التي يبنيها هو كي ينتج برنامجاً بالجافا، ربما يفسر هذا الاسم OOP

بهذا يكون درسنا قد انتهى، أرجو أن يكون واضحاً.. والسلام عليكم..