استخدام برمجة الكائنات OOP (فيPHP)

    • استخدام برمجة الكائنات OOP (فيPHP)

      • قبل ال OOP
      قبل الـ OOP كانت البرامج تبدو ضخمه وكبيره جدا وتحتاج الى معماريين ومهندسين لتطوير هذه البرامج، وتحتاج ال مزيد من الوقت والمال للصيانة.
      على سبيل المثال اذا اردنا ان نضيف بعض الميزات او التحسينات الى التطبيقات الموجوده نحتاج الى عدة اسابيع او اشهر احيانا لتحديثها وعملية تتبع الاخطاء تحتاج الى عدد كبير من المبرمجين .
      وعملية تتبع الاخطاء الموجوده في هذه التطبيقات هي مشكله بحد ذاتها، عندما نريد تتبع الدوال Functions الموجوده تأخذ وقت اطول من عملية اضافة دوال اخرى، ويصبح البرنامج ضخم جدا وايضا يلزم عدد اكبر من المبرمجين. لذا تم ايجاد الـ OOP.

      • الاختلاف بين Object Oriented Programs و Functional Programs
      عملية الاختلاف هي عندما نقوم بتصميم برنامج باستخدام الـ functions يتوجب علينا تصميم هذا البرنامج بان تقوم دالة باستدعاء دالة اخرى، البيانات ترسل كبيانات ادخال ثم تقوم الدالة بمعالجة هذه البيانات او المدخلات واعطاء النتيجة كـ output . بعبارة صغيره هي ان الـ functional programs -> code-centric .
      الـ OOP تأخذ الطريقه العكسيه هي ان الـ objects التي تحتوي على البيانات تحتوي على دوال تسمى methods (الـ method شبيه بالـ Function).
      عندما يقوم الـ Object بطلب خدمه من Object اخر فانه يقوم بارسال رسالة ويستقبل الرد.

      رسمة توضح المقارنه بين الحالتين
      www20.brinkster.com/phptalk/images/image1.jpg

      في الحالة الاولى (Functional Program :: code-centric)
      1. يتم ادخال البيانات الى a()
      2. تقوم a() باستدعاء b() باستخدام نتائج a()
      3. b() تستدعي c() باستخدام نتائج b()
      4. c() تقوم بارسال النتائج الى b() وبدورها b() تقوم بارسال النتائج الى a()
      5. اظهار النتيجه النهائيه للبرنامج

      في الحالة الثانية (Object-Oriented Program :: data-centric)
      Object1 يقوم بطلب الخدمه من object3 و هو بدوره يقوم بالطلب من object4 وهكذا حتى يقوم Object1 باستقبال الرد من object3 تحتوي على النتيجه النهائية.
      الاختلاف بين الحالتين هو ان الـ Objects تحتوي على البيانات ةطرق معالجتها.
      بينما تكون البيانات منفصله عن الـ functions هذا يجعل من OOP عملية سهله لتتبع البرنامج وسهولة عملية الصيانه والتحديث.
      • أهمية الـ OOP
      ما هو مهم بالنسبه لك كمبرمج هو ان الـ OOP ليست الا تقنيه او طريقة ليست لغة برمجة.
      PHP,C++ and Java جميع هذه اللغات هي لغات OOP لانها تطبق نفس الهدف ولكن البرمجه باستعمال Java و C++ تختلف .
      يجب عليك كمبرمج ان تفهم مبدأ الـ OOP المشروح في الرسمه السابقه بشكل عام ثم تقوم بالتركيز على اللغة التي تنوي استعمالها. سنقوم في هذا الدرس بالتركيز على لغة PHP .

      عندما نقوم بتطوير التطبيقات الخاصه بنا نستطيع ان نقسم هذه التطبيقات او البرامج الى اجزاء. على سبيل المثال طبقات عرض مختلفه
      Database access objects, search engines, security components.
      عند عملية التحديث للبرامج كوحدات صغيره ومجزئه تضمن ان التغييرات في Object معين لن تؤثر على بقية الـ Objects .


      • مكونات Object-Oriented Program
      Classes: الـ class هو تعريف او عملية عرض لنوع معين من البيانات، عندما نقوم بتعريف Object جديد يجب ان نستعمل كلمة class في PHP Scripts.
      توضيح بسيط بين object و class هو ان الـ classes تقوم بتعريف objects تقوم باستعمالها في تطبيقاتها .


      3 مكونات للـ Class في PHP
      اولا : members
      على سبيل المثال سنقوم بتصميم class يسمى User، فان الـ members لهذا الـ class (المتغيرات التي يتم تعريفها لاستخدامها لاحقا)
      Firstname, lastname, email, username and password
      var $firstname;
      var $lastname;
      var $email;
      var $username;
      var $password;

      ثانيا : methods
      الخدمات او الدوال الموجوده داخل الـ Object وهذه methods تقوم باستخدام الـ members او المتغيرات المعرفه سابقا.
      على سبيل المثال لدينا الـ class السابق وهو الـ User وهذا الكلاس يوجد به methods مثلا method للتأكد من صلاحية البريد الالكتروني emailالمعرف في الـ members و method اخر للتأكد من عدد الاحرف المدخله لاسم المستخدم username وهكذا .

      اخيرا : Constructor
      هذه طريقه خاصه لعملية انشاء الـ object ليصبح جاهزا للاستعمال، يوجد منشئ واحد فقط للـ object في ال PHP.
      على سبيل المثال class User من الضروري ان نقوم باخذ جميع المتغيرات التي تم تعريفها (members) سابقا.
      يجب ان يكون اسم الـ constructor مساوي لل className
      مثلا لدينا اسم class هو User يكون الـ constructorبالشكل التالي
      Class User
      {
      …………….

      Void User() //constructor
      {
      …………..
      }
      ملاحظة : الـ constructor يجي ان لا يعيد قيمة معينة هو فقط لجعل الـ class في مرحلة التشغيل(من غير المنطقي ان تجعل الـ class يعيد قيمة معينه return value).

      الصيغة العامة او الشكل العام لكتابة الـ Class

      www20.brinkster.com/phptalk/images/image2.jpg
      كما ترى أن الـ class ليس الا مجموعة من members (variables) و methods(functions) .
      الـ members اما ان تكون integers او strings او ان تكون array او objects اخرى.
      PHP لا يحتاج ان تقوم بتعريف انواع المتغيرات ما عليك سوى ان تقوم بعملية التسمية.
      ما رأيك ان نقوم بكتابة سكريبت صغير يشرح الـ class
      قبل البدأ عليك مراعاة الامور التالية :
      - يجب ان يبدأ اسم الـ class بحرف كبير لعملية التفريق بين اسم الـ class و functions و variables .
      - من المفيد ايضا ان تقوم بحفظ الملف بنفس اسم الـ class مثلا لدينا class User يجب حفظ الملف باسم user.php .
      - الملف يجب ان يحتوي على class واحده وان كان لديك اكثر من ملف يفضل وضعهم في مكان واحد ونقوم باستدعاء الـ class من ملف اخر باستعمال include_once() او require_once() .
      - يجب كتابة $this-> قبل الـ member name او variable .

      والان لنحاول تطبيق المثال التالي .....

      سنبدأ اولا بتعريف الـ class وتعريف الـ members(variables) لهذا الـ class
      www20.brinkster.com/phptalk/images/code1.jpg
      الان سنقوم بكتابة الـ constructor للـ class User
      وظيفة الـ constructor : هي عملية تهيئة (بدء) لجميع عناصر الـ object للتأكد من ان جميع الخدمات يمكن استخدامها متى يطلب منها ذلك.
      مثلا ..... لو لم نقم بكتابة الـ constructor لا نستطيع استخدام الدالة display() التي سنقوم بكتابتها.
      www20.brinkster.com/phptalk/images/code2.jpg
      في لغتي الـ C++ و Java تكون الـ this اختياريه ليست اجباريه، بينما في لغة PHP فانها اجباريه لان PHP ضعيف في التعامل مع scope of variables .
      في لغة PHP 3 مستويات للـ namespace (مجموعه من variables names) مكان تخزيت الـ variables :
      - المستوى الادنى (lowest level) يستعمل للـ local variables أي المتغيرات التي يتم تعريفها داخل الدوال (functions or methods).اي متغير (variable) يتم تعريفه داخل هذا المستوى يضاف الى local namespace .
      - المستوى الثاني يتضمن جميع المتغيرات members للـ object .
      - المستوى الاعلى يستعمل لـ global variables .
      * $this تخبر الـ PHP انك تريد المتغير من المستوى الثاني.اذا لم تقم باضافة الـ $this فانك تود انشاء متغير جديد في local namespace كما تم الشرح سابقا.

      الان سنقوم بكتابة الدالة display()
      www20.brinkster.com/phptalk/images/code3.jpg
      نلاحظ ايضا اننا قد اغلقنا الـ scope لل class ايضا ({) وبالتالي انتهينا من كتابة الـ class User .

      الان سنقوم بانشاء الـ object لل class User
      www20.brinkster.com/phptalk/images/code4.jpg
      هكذا نكون قد انتهينا من هذا الدرس وان شاء الله في الدرس القادم سأتناول مواضيع اخرى في OOP .ان شاء الله سنقوم بتغطية ...
      1. Encapsulation
      2. Inheritance
      3. Polymorphism




      ~!@@ah