SPEED 3 NET

Web master tools - programmes - scripts - html code - code css
 
الرئيسيةSpeed Portalمكتبة الصورس .و .جبحـثالأعضاءالمجموعاتدخولالتسجيل

شاطر | 
 

 التوريث فى الـ Inheritance in OOP

اذهب الى الأسفل 
كاتب الموضوعرسالة
khdiwi
ELkInG 3s
ELkInG 3s


عدد المساهماتى : 1994
الجنس : ذكر

مُساهمةموضوع: التوريث فى الـ Inheritance in OOP   الثلاثاء أغسطس 25, 2009 6:53 pm

رأينا بالدرس السابق لمحة بسيطة عن الـ class

وكما ذكرنا الـ class عبارة عن قالب

يضم بداخله وظائف عديدة كلها تتعلق بشئ معين (كامجموعة دوال عملها تنفيذ اوامر لقاعدة البيانات).

ودرس اليوم للتحدث عن مصطلح التوريث.

معنى مصطلح التوريث بإختصار, انك تقوم بجعل class2 مثلا عبارة عن قالب فرعى من class1

الكلاس الفرعى, يضم كل دوال الكلاس المورث منه ويمكن ان نضيف به هو نفسه دوال اخرى.

لنأخذ مثال بسيط

الكلاس الأول هو التالى
كود PHP:

class parent_class{
function fun1($str){
echo "the string in parent class is: {$str}";
}
}


اذن لنقم بصنع object لهذا الكلاس ونستدعى الـ method التى لها الإسم fun1

كود PHP:

$obj1= new parent_class;
$obj1->fun1('text in parent class');


هكذا رأينا ان كل شئ يعمل بشكل جيد فى الكلاس الرئيسى.

ما رأيك ان ننشئ كلاس فرعى لهذا الكلاس؟
كود PHP:

class sub_class extends parent_class{
function fun2($str){
echo '<br /> the string in the sub class is: '. $str;
}
}


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

لافظ فى المثال التالى اننا استطعنا ان نستخدم الدالة fun1 الموجودة بالكلاس الرئيسى, واستخدمنا ايضا الدالة fun2 الموجودة بالكلاس الفرعى.

وتم هذا عن طريق الـ object الخاص بالكلاس الفرعى.
كود PHP:

$another_obj = new sub_class;
$another_obj->fun1('added by sub class');
$another_obj->fun2('add by the sub class');


هل رأيتم كيف تم توريث fun1 من القالب parent_class الى القالب sub_class ؟


اتمنى يكون كل ما سبق واضح وبسيط.

التالى هو

تحديد صلاحيات الوصول Limit access

المصطلح بحد ذاته له معنى وهذا ماسأقوم بشرحه الأن.

اولا هناك ثلاث مستويات لصلاحيات الوصول, هذه المستويات, تضاف لكل من المتغيرات الموجودة داخل الكلاس او الدوال. وهما كالتالى


public بالنسبة للمتغيرات فهى تساوى كلمة var وهذا المستوى من صلاحيات الوصول, يعنى ان سواء من داخل الكلاس نفسه, او من خلال الـ object او من خلال الكلاسات الفرعية له. وبالنسبة للدوال, فـ عندما ننشئ دالة ولا نحدد مستوى وصول لها, يكون مستوى الوصول لها هو public


private وهى تعنى ان كل الدوال التى داخل الكلاس فقط, هى التى يمكنها التعامل مع هذا المستوى من صلاحيات الوصول (سواء تم اضافة هذا المستوى لدالة او لمتغير)

protected تعنى ان دوال هذا الكلاس فقط هى التى لها صلاحيات الوصول, وايضا الكلاسات المتفرعة من هذا الكلاس.



لنأخذ عدة امثلة توضح الأمر.

كود PHP:

class a_class{
//متغير يمكن الوصول من داخل او خارج الكلاس
var $var1 = "this is a public var";
//متغير لا يمكن الوصول له الا من داخل الكلاس
private $var2 = "this is a private var";
//متغيير لا يمكن الوصول له الا من داخل الكلاس, والكلاسات المتفرعة منه
protected $var3 = "this is a protected var";

//public function
function fun1(){
return $this->var2;
}
}


انظر لهذا الكلاس جيدا ودقق به واقرأ التعليقات الموجودة به.

لنبدأ انشاء object لهذا الكلاس ونحاول الوصول لمختلف خصائص هذا الكلاس.

كود PHP:

$obj = new a_class;

//لنحاول الوصول للمتغير العام الموجود بهذا الكلاس
echo $obj->var1;
//نجح الوصول لهذا المتغيير بدون مشاكل


اذن لنحاول شئ اخر
كود PHP:


حتى الأن كل شئ يعمل على مايرام اليس كذلك؟ لنجرب شئ اخر
[php]
echo $obj->var2;


ما الذى سينتج عن ذلك؟ شئ شبيه بالتالى
كود:

Fatal error: Cannot access private property a_class::$var2 in C:\Documents and Settings\XPPRESP3\Local Settings\Temp\phpdesigner_output_tmp.php on line 25

هذا يعنى ان هناك خطأ, فى محاولة الوصول لمتغيير صلاحياته تمنع الوصول له خارج الكلاس نفسه.. وسيظهر خطأ شبيه به اذا حاولنا الوصول للمتغيير الثالث ايضا.

لكن جرب التالى
كود PHP:

echo $obj->fun1();


لقد تم طباعة المتغير الذى صلاحيات وصله هى private كيف تم هذا!؟

الم اقل انك تستطيع الوصول للمتغيرات التى لها الصلاحيات private داخل الكلاس نفسه بدون مشاكل؟

عندما استدعينا الدالة fun1 فإننا لم نقم بإستدعاء المتغيير var2
لكن الدالة هى التى استدعته, والدالة نفسها موجودة داخل الكلاس بالتالى لها صلاحيات الوصول لهذا المتغيير.


اتمنى يكون كل شئ واضح وبسيط بإذن الله.


هذا الدرس والدرس الذى قبله, لم يكن الهدف منهم ان يتم تغطية كل مايتعلق الـ OOP لأن هذا امر معقد جدا بالنسبة لمستواك الحالى.

لكن بإذن الله بنهاية الدورة سيكون هناك مشروعات بسيطة سوف نقوم فيها بتطبيق الكثير من الأشياء, منها اشياء تعلمناها ونطبقها, ومنها اشياء لم يتم شرحها وسيتم شرحها خلال شرح هذه المشاريع بإذن الله.

مع كل تمنياتى بالتوفيق للجميع.
الرجوع الى أعلى الصفحة اذهب الى الأسفل
 
التوريث فى الـ Inheritance in OOP
الرجوع الى أعلى الصفحة 
صفحة 1 من اصل 1

صلاحيات هذا المنتدى:لاتستطيع الرد على المواضيع في هذا المنتدى
SPEED 3 NET :: |l|l| Technology ParT|l|l| :: برامج و طرق عمل البرامج-
انتقل الى: