شـبـكــة عـمّـــار
إخبارية - ترفيهية
- تعليمية



جديد الصور
جديد الأخبار
جديد المقالات


جديد الصور

جديد البطاقات

جديد الصوتيات

المتواجدون الآن


تغذيات RSS

2012-08-15 03:16

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

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

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

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

الـ OOP تأخذ الطريقه العكسيه هي ان الـ objects التي تحتوي على البيانات تحتوي على دوال تسمى methods (الـ method شبيه بالـ Function).

عندما يقوم الـ Object بطلب خدمه من Object اخر فانه يقوم بارسال رسالة ويستقبل الرد.

رسمة توضح المقارنه بين الحالتين
http://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

http://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
http://www20.brinkster.com/phptalk/images/code1.jpg
الان سنقوم بكتابة الـ constructor للـ class User
وظيفة الـ constructor : هي عملية تهيئة (بدء) لجميع عناصر الـ object للتأكد من ان جميع الخدمات يمكن استخدامها متى يطلب منها ذلك.
مثلا ..... لو لم نقم بكتابة الـ constructor لا نستطيع استخدام الدالة display() التي سنقوم بكتابتها.
http://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()
http://www20.brinkster.com/phptalk/images/code3.jpg
نلاحظ ايضا اننا قد اغلقنا الـ scope لل class ايضا ({) وبالتالي انتهينا من كتابة الـ class User .

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


تعليقات 0 | إهداء 0 | زيارات 686


خدمات المحتوى
  • مواقع النشر :
  • أضف محتوى في Digg
  • أضف محتوى في del.icio.us
  • أضف محتوى في StumbleUpon
  • أضف محتوى في Google


تقييم
1.00/10 (3 صوت)


Powered by Dimofinf cms Version 3.0.0
Copyright© Dimensions Of Information Inc.