فــُـصّـِــلـــَــــت

البرمجة الكائنية: لماذا وكيف؟

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

حرفة البرمجة


بعد أن كان فرعا من علم الرياضيات، تطور علم الحاسوب ليصبح مستقلا بذاته، ونشَأَت بفضله حرف واختصاصات عديدة، فرضت نفسها في السوق فأصبح هناك إنتاج وحاجة وزبائن.. فهي الآن صناعة ذات قيمة عالية وتحقق مكاسب عظيمة. تُنتج هذه الصناعة بالأساس برامج الحاسوب، وهو منتوج له خصائص كأي منتوج آخر، فهو يباع ويشترى، يعمل ويتعطل، يبلى ويُصان وله دورة حياة، لكن ما يميّزه أننا لا نستطيع لمسه، فهو مُجَرّدٌ ولا ندركه بحواسّنا، نراه، نستعمله، لكنه فقط شبه موجود، فهو ليس حقيقي كالسيارة مثلا، وهذا يطرح المشكل الأساس: كيف نضمن جودة المنتوج؟ أو ما نسميه بالنضج البرمجي. من أجل هذا بدأ علماء الحاسوب والبرمجة يفكرون في وضع معايير ومقاييس لضمان الجودة، ومن هنا نبعت فكرة أبرقت لها العيون: نجعل البرمجيات تحاكي الواقع ونتعامل معها كما لو كانت ملموسة، فيصبح المبرمجون يتعاملون مع كائنات لها خصائص ووظائف، وهكذا تصير هذه الصناعة المجرّدة كسائر الصناعات، لها مالهن وعليها ما عليهن.

من جهة أخرى


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

أ. البنيوية: تقسيم المشكل إلى مشاكل فرعية يمكن حلها منفصلة.

 

وثيقة 1: البنيوية

ب. التجريد (تسهيل الفهم): مصطلحات مجال البرنامج معكوسة في الحل البرمجي.

 

وثيقة 2: التجريد

ج. الكبسلة (إخفاء المعلومات): إخفاء التعقيدات البرمجية على المستعمل، وتعامله مع الواجهة فقط.

 

وثيقة 3: الكبسلة

د. التركيب: بناء أنظمة جديدة من خلال تركيب الوحدات. 

 

وثيقة 4: التركيب

ه. السلالة: التطوير التدريجي للوحدات البسيطة والصغيرة إلى وحدات أكبر وأعقد.

 

وثيقة 5: السلالة

و. الاستمرارية: تغيير أو تعديل الوحدات لا يؤثر على النظام.

 

وثيقة 6: الاستمرارية

 

مفاهيم البرمجة الكائنية


أصبحت برمجة الكائنات علما قائما، هناك من يتقنه وهناك من لا يفعل، ومن يتقنه يُسمى مهندس نظم برمجية، يَعنَى المهندس بدراسة كيفية تحديد الكائنات من خلال اصطلاحات المشكل المطروح، وانشاء العلاقات فيما بينها، وبناء كائنات معقدة من خلال أخرى بسيطة، كل هذا لا يتقنه المرء بين ليلة وضحاها، فهي مهارة تُكتَسب بالخبرة والصبر. ومن أجل ذلك نسرد مختلف المفاهيم المؤسسة لهذا العلم.

أ. ما معنى كائن؟


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

ب. ما معنى فصيلة؟


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

ج. ما معنى كبسَلة؟


تُخَزِن الفصيلة التفاصيل الداخلية للكائن وتمنع الوصول إليها إلا من خلال واجهات، فنستعمل هذه الواجهات للتحكم في الكائن، وهذا يضمن حماية لخصائص هذا الكائن بحيث لا نستطيع تغييرها مباشرة، وكذلك يضمن عدم تأثر النظام بالتغييرات الداخلية التي قد تطرأ على الكائن، هذا ﻷن النظام لا يعرف عنها شيئا ويتعامل مع الواجهة فقط. ولهذا فالفصيلة هي كبسولة تحفظ خصائص الكائن.
يتم الوصول إلى الخصائص المخفية عبر دوال نسميها دوال الأخذ والرد، ذلك لأنه عبرها يتم أخذ القيم الجديدة لهذه الخصائص المخفية وردها.. وهي تكتب عادة: خذ_خاصية()، رد_خاصية().

د. ما معنى علاقة؟


من خلال العلاقات بين الفصائل، يستطيع كائن دفع آخر للقيام بوظيفة لصالحه، فهناك علاقة بين الزبون والحساب المصرفي، بحيث أن الأول يستعين بالتاني لإيداع المال وفحص الرصيد مثلا.. وهذه العلاقة نسميها علاقة عادية، ولها منحى، بمعنى أنه إذا كان منحى العلاقة من الزبون إلى الحساب فهذا يعني أن الزبون وحده من يستعمل الحساب (يعلم بوجوده)، أما إذا كان المنحى من الحساب إلى الزبون فهذا يعني أن الحساب وحده من يستعمل الزبون (ويعلم بوجوده) وهذا تصميم خاطئ في مثالنا، كما يمكن للمنحى أن يكون في الاتجاهين معا. هناك نوعان إضافيان من العلاقات هما علاقة التجميع وعلاقة التركيب، وهذه الأنواع الثلاثة تُربك المتعلم حيث أنها متقاربة من حيث الشكل.

ه. ما الفرق بين العلاقة العادية، وعلاقة التجميع وعلاقة التركيب؟


علاقة التجميع هي نوع خاص من العلاقة العادية، وما يميزها هو أنه إذا كانت علاقة تجميع بين كائنين أ و ب، ومنحاها من أ إلى ب، فهذا يعني أن أ يحتوي ب. مثال على ذلك العلاقة بين الكائنين مصرف ومدير المصرف، فالأول يحتوي على الثاني، أي أن مدير المصرف يكون داخل المصرف.

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

و. ما معنى التجريد والتعميم؟


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

ز. ما معنى واجهة؟


تعنَى الواجهات بتحديد بنية الفصيلة، أو الهيئة الخارجية للفصيلة دون تركيبها الداخلي، فيمكن من خلالها التعامل مع كائنات الفصيلة دون الحاجة إلى التعرف على بنيتها وتعقيدها الباطني، وهذا المفهوم يكون مهما جدا عندما تكون البنية الداخلية للفصيلة في تغيّر مستمر، فبواسطة الواجهات يمكن استعمال الفصيلة دون التأثر بالتغييرات الطارئة عليها. هناك من يقول بأنه يجب تحديد واجهة لكل فصيلة بينما يرى آخرون أن هذا رأي متطرف.

ح. ما معنى وراثة؟


يمكن لفصيلة جديدة أن تُنشَئ من فصيلة موجودة، فترث خاصياتها ووظائفها ويمكنها تمديدها بتعيين خصائص ووظائف تخصّها، نسمي هذا بالوراثة. ونقول أن وظائف الفصيلة الوارثة تَحْجُبُ وظائف الفصيلة الموروثة.

ط. ما معنى تعدد الأوجه؟


يعني تعدد الأوجه أن نفس الوظيفة يمكن أن يقوم بها عدد مختلف من الكائنات وبطرق وأشكال متعددة. فالناقة تسير والسيارة تسير والإنسان يسير، إنها نفس الوظيفة 'السير' إنما هو كلٌ يسير بطريقته الخاصة. في البرمجة الكائنية يطبَّق تعدد الأوجه بأشكال مختلفة أهمها تحميل الدوال وحجب الدوال وهذان المفهومان تقنيان نتكلم عنهما في مقالة أخرى.

خاتمة


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

إلى جانب البرمجة الكائنية، هناك أنماط أخرى كالبرمجة البياناتية والبرمجة الخدماتية وغيرها.. لكن استعمالها مازال غير مستقل عن برمجة الكائنات ولهذا يتم حالياً دمج كل هذه الأنماط تحت راية البرمجة الكائنية.



















أكمل القراءة