البرمجة اﻹجرائية أم كائنية التوجه؟ Prodecural or OOP?? في لغة PHP

السلام عليكم و رحمة الله و بركاته,

شخصيا أفضل اﻷولى ﻷنها أسهل مع أنها أقدم من الثانية. التوجه الكائني يتطلب طريقة مختلفة في التفكير بالكود و كيفية تنظيمه عن اﻹجرائي لكن مع اﻷسف - حسل علمي و ما فهمته - فإن أغلب أو جميغ القوالب CMS أو حتى إطارات العمل frameworks تعمل بطريقة الOOP بدل اﻹجرائي.

ما رأيكم بهذا و هل هذا صحيح أو ﻻ؟؟

أنا الآن مبتدأ بلغة PHP و عمري 23 سنة!!

مع السلامة!!


مرحباً عزيزي،

هناك اختلاف اراء من حيث سهولة التعلّم بين البرمجة الاجرائية و الكائنية. ولكن هناك اتفاق على ان الكائنية اسهل عملياً حاضراً ومستقبلياً على حسب المشروع.

سوف اخوض معك في بعض التفاصيل ليس كلها تريك مفهوم البرمجة الكائنية.

في لغة PHP قد لايتضح للمبتدئ مفهومها لانه لا يهتم بنوعية المتغير. هل هو Int او string او ما الى ذلك. وقد يعرف متغيراً ما ويدخل فيه قيمة من نوع integer ثم يدخل قيمة اخرى من نوع اخر وليكن double مثلاً. لذلك المبتدئ لا يأبه بنوعية المتغير في PHP. ولحسن الحظ في النسخة القادمة من PHP سيتم دعم انواع المتغيرات كما هي في لغات اخرى.

لغة الالة اصفاراً وواحدات فهذه مشكلة انها غير مفهومة لنا كبشر. فأصبحت لغة التجميع فهي ايضاً مفهومة جزئياً. بعدها اتت لغات high level مثل C فهي مفهومة بكلمات ننطقها كبشر. مثل Print او اطبع. بعدها اتت C++ بمفهوم البرمجة الكائنية. الذي هو مقارب لفلسفة فهم البشر للاشياء. فلو لاحظت فبرمجة الكائنات اسهل منطقاً من البرمجة الاجرائية.

اهم المشاكل التي حلتها البرمجة الكائنية هي تكرار الشفرة البرمجية. تقريب لفلسفة الفهم البشري للكائنات. ولكن قد تسألني عن كيفية تعلم البرمجة الكائنية، صح ؟ حسناً سأجيبك باجابة تبسط مفهومها، اجابة تحبها.

تحليل المشكلة:

بمثال بسيط تريد برمجة مدونة بسيطة. لها كتّاب (أعضاء) ولها مواضيع (تدوينات) وتعليقات على التدوينات.

تصميم الاصناف:

كل اسم في تحليل المشكلة قد يكون صنفاً (Class). في مثالنا السابق الاسماء هي. (اعضاء، تدوينات، و تعليقات). كل مفرد من الاعضاء هو كائن، وكل مفرد من التدوينات هو كائن كذلك التعليقات.

فلدينا الان ٣ اصناف (classes) صح، كيف نكتبها ؟

كل كائن يحتوي على معلومات ويستطيع فعل اشياء.

كمثال لو قلنا الانسان كائن معلوماته (اسمه، جنسيته، عمره .. الخ) والاشياء التي يستطيع يفعلها (المشي، الركض، الدراسة، العمل ... الخ).

ففي مثالنا السابق لدينا (الاعضاء) نأخذ مفردها ليكون عضو. إذاً لدينا صنف اسمه عضو

ماهي معلومات العضو ؟ لنقل (اسم المستخدم، كلمة المرور و البريد الاكتروني) ماذا يستطيع العضو فعله ؟ (كتابة تدوينة، التعليق على تدوينة).

الان عرفنا مايسمى Data members (المعلومات) و methods (الوضائف) بتعبير اخر (المتغيرات - Variables) و الدوال (functions).

لذا يكون تعريف الصنف بكل بساطة هكذا: مثال لغاية الشرح بلغة php

<?php


class User {
    private $username;
    private $password;



    public function write_new_post($title, $content){
        //...
    }

    public function write_comment($post, $content){
        //...
    }


}

?>

اذاً ماهي معلومات التدوينة (الموضوع) وماهي وضائفها؟ لنفترض ان معلوماتها (عنوانها، محتواها ايضاً كاتبها) ووضائفها هي (الظهور بالصفحة الرئيسية، تسجيل معلوماتها في قاعدة البيانات).

كذلك التعليق معلوماته (التدوينة التي ينتمي اليها التعليق، المعلق، والمحتوى) ووضائفه (الضهور اسفل التدوينة، تسجيل معلوماته في قاعدة البيانات).

اذا فهمت شرحي قم بكتابة صنف التدوينة. شكراً لك :)

جزاك الله خيرا على هاته المعلومات القيمة أخي راشد المري لكن الجملة اﻷخيرة لن أستطيع تنفيذها أخي مع اﻷسف!!