اذهب إلى المحتوى
  • 0

شرح مصطلح Polymorphism في php oop ؟

محمود سامي حسين

السؤال

هل هناك ما أخطأت به في هذا المثال وهل هذا فقط هو مصطلح الPolymorphism ؟

<?php
/*
- Polymorphism  أو الواجهات interfaces مصطلح في البرمجة كائنية التوجة بمعني متعدد الأوجة 
- مثال الريموت كنترول يقوم بنفس الوظيفة في كلا من التلفزيون والريسيفر
- يتم التصريح عنة بأستخدام الكلمة المحجوزة interface
- ويتم أستخدامة داخل الاصناف بأستخدام الكلمة المحجوزة implemnts 
*/
/*بفرض أن لديك جهاز تليفزيون وريسيفر في منزلك 
و الواجهة تمثل الريموت كنترول 
*/

interface remotecontrol{
    //يمكن حذف هذه الطرق methods ولن يحدث اي خطأ 
    public function channel_1();
    public function channel_2();
    public function channel_3();
    public function channel_4();
    public function power_on();
    public function power_off();
}

// الصنف الأول : ريموت الريسيفر 
class reciver_remote implements  remotecontrol{
    //لا يمكن حذف هذه الطرق لانه مصرح عنها في الواجهة والا سوف يحدث خطأ 
    public function channel_1(){
        echo "تم تغيير القناة بنجاح أنت تشاهد الأن القناة الأولي  ";

    }
    public function channel_2(){
        echo "تم تغيير القناة بنجاح أنت تشاهد الأن القناة الثانية  ";


    }
    public function channel_3(){
        echo "تم تغيير القناة بنجاح أنت تشاهد الأن القناة الثالثة  ";


    }
    public function channel_4(){

        echo "تم تغيير القناة بنجاح أنت تشاهد الأن القناة الرابعة  ";

    }
    public function power_on(){
        echo "تم تشغيل الرسيفر ";


    }
    public function power_off(){
        echo "تم أغلاق الريسيفر";


    }

}

// الصنف الثاني  : ريموت التيلفزيون
class tv_remote implements  remotecontrol{

     public function channel_1(){
        echo "تم تغيير القناة بنجاح أنت تشاهد الأن القناة الأولي  ";

    }
    public function channel_2(){
        echo "تم تغيير القناة بنجاح أنت تشاهد الأن القناة الثانية  ";


    }
    public function channel_3(){
        echo "تم تغيير القناة بنجاح أنت تشاهد الأن القناة الثالثة  ";


    }
    public function channel_4(){

        echo "تم تغيير القناة بنجاح أنت تشاهد الأن القناة الرابعة  ";

    }
    public function power_on(){
        echo "تم تشغيل التيلفزيون ";


    }
    public function power_off(){
        echo "تم أغلاق التيلفزيون";


    }

}
# الأن للتصريح عن كائنات جديدة وتستطيع تعديلها كما تريد
$reciver_remote = new reciver_remote();
$reciver_remote->channel_1();
$reciver_remote->channel_2();
$reciver_remote->channel_3();
$reciver_remote->channel_4();
$reciver_remote->power_on();
$reciver_remote->power_off();

$tv_remote = new tv_remote();
$tv_remote->channel_1();
$tv_remote->channel_2();
$tv_remote->channel_3();
$tv_remote->channel_4();
$tv_remote->power_on();
$tv_remote->power_off();


//لطباعة الكائنات
var_dump($reciver_remote,$tv_remote);

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 1

Polymorphism أو تعددية الأوجه تعني أنه يمكن معاملة الكائن بأشكال مختلفة، في مثالك الصنفين tv_remote و reciver_remote يمكن معاملتهما كصنف من النوع remotecontrol،

يمكن تضمين تعددية الأوجه بطريقتين:

  • تعريف شكل الكائن ضمن واجهة interface يضمنها كل صنف بطريقته الخاصة (وهي الطريقة المستخدمة في مثالك)
  • تعريف شكل الكائن ضمن صنف أب، والوراثة منه في الصنف الابن،وسيعامل الصنف الابن على أنه من نفس نوع الصنف الأب

يمكنك القراءة أكثر عن البرمجة كائنية التوجه ضمن المقالات التالية:

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 1

بالإضافة إلى إجابة حسن يمكننا توضيح تعددية الأوجه عبر المثال التالي

نفترض أننا أردنا إنشاء دالة تقوم بوظيفة ما على جهاز التحكم remote_control أيًا كان نوع هذا الجهاز سواء كان reciever_remote او tv_remote أو حتى نوع ثالث, وبغض النظر عن الشركة المصنعة لهذا الجهاز

على سبيل المثال دالة تقوم بحساب أقصى مدى يستطيع الوصول إليه هذا الجهاز, بدون تعددية الأوجه سنحتاج إلى إنشاء دالة لكل جهاز 

function getTvRemoteHealth(TV_REMOTE $remote){
	echo $remote->getHealth()
}

function getRecieverRemoteHealth(RECIEVER_REMOTE $remote){
	echo $remote->getHealth()
}

بينما عبر تعددية الأوجه يمكننا كتابة دالة أكثر عمومية كالأتية

function getRemoteHealth(remotecontroll $remote){
	echo $remote->getHealth()
}

بما أن جميع أجهزة التحكم تقوم بعمل implement للواجهة البرمجية remotecontrol لذا بالتالي يمكننا كتابة دالة واحدة كالسابقة تقوم بإستقبال كائن من نوع remotecontrol بغض النظر عن صنفه ومن ثم مناداة الدالة الخاصة بالوظيفة التي نريدها أيًا كان نوع جهاز التحكم  tv_remote, reciever_remote, etc 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...