انجمن ایران پی اچ پی
توضیح روش پولی مورفیسم در شی گرایی - نسخه قابل چاپ

+- انجمن ایران پی اچ پی
+-- انجمن: پی اچ پی/PHP (https://forum.iranphp.org/Forum-%D9%BE%DB%8C-%D8%A7%DA%86-%D9%BE%DB%8C-PHP)
+--- انجمن: شی گرایی (https://forum.iranphp.org/Forum-%D8%B4%DB%8C-%DA%AF%D8%B1%D8%A7%DB%8C%DB%8C)
--> +--- موضوع: توضیح روش پولی مورفیسم در شی گرایی



توضیح روش پولی مورفیسم در شی گرایی - zoghal - ۱۳۸۸ مرداد ۱۶

دوستان و اساتید بزرگ ممنون میشم در مورد روش مولی مورفیسم توضیح کاملی ارائه بدن


RE: توضیح روش پولی مورفیسم در شی گرایی - Alimokhlesi - ۱۳۸۸ مرداد ۱۶

پولی مورفیسم یا چند ریختی یعنی اینکه یک کار با روشهای انجام متفاوت تو سیستم مورد نظر شما وجود داشته باشه.
به عنوان مثال شما همیشه میاید و یه رشته ای رو در خورجی چاپ میکنید . .لی در اشیاء و کلاس های مختلف رنگ و فونت و سایز انها باهم متفاوته . در چنین شرایطی ساختار همه ی کلاس های شما از متد به نامPrintText برخوردارن ولی هر کدوم محتوای و روش اجرای خاص خودشون رو دارن. برای اینکار میان یه کلاس ابسترکاکت یا یه اینترفیس تعریف میکنن و این متدو رو تواون تعریف میکنن. بعد همه ی کلاس هایی که از این ساختار استفاده میکنن میان از اون کلاسه ارث میبرن و یا از اون اینترفیسه ایمپلیمنت میگیرن.


RE: توضیح روش پولی مورفیسم در شی گرایی - zoghal - ۱۳۸۸ مرداد ۱۶

ممنون یک نمونه کوچیک می تونید واسم بزنید؟


RE: توضیح روش پولی مورفیسم در شی گرایی - hidensoft - ۱۳۸۸ شهریور ۰۳

سلام
من نمی دونم چرا به برنامه نویسی Oop اصلا احمیت داده نمی شه ! واسه پیدا کردن یک کار معمولی هم حداقل شما باید Oop بلد باشی .. بریم سر اصل مطلب

امروز در رابطه با یکی از نکات قدرت Php می خوایم صحبت کنیم .

[size="4"]پولی مورفیسم[/size]

می شه گفت پیچیده ترین روش برنامه نویسی در مبحث oop بر می گرده به این بخش . با استفاده از این روش می توانید کنترل برنامه را افزایش داده و از تعریف چند آبجکت برای چند کلاس جلوگیری کرد .
این مثال از صفحه 67 و 68 [URL="http://www.phptr.com/content/images/013147149X/downloads/013147149X_book.pdf"]PHP 5 Power Programming [/URL]هست .

کد پی‌اچ‌پی:
class Cat {
    function 
miau()
    {
        print 
"miau";
    }
}
class 
Dog {
    function 
wuff()
    {
        print 
"wuff";
    }
}
function 
printTheRightSound($obj)
{
    if (
$obj instanceof Cat
    {
        
$obj->miau();
    } 
    else if (
$obj instanceof Dog
    {
        
$obj->wuff();
    } 
    else 
    {
        print 
"Error: Passed wrong kind of object";
    }
    print 
"\n";
}
printTheRightSound(new Cat());
printTheRightSound(new Dog());


/* 
خروجی :

    miau
    wuff
*/ 

جالب بود نه ؟

عملکرد برنامه :

دو کلاس یکی با نام Cat و دیگری با نام Dog وجود دارد . تابع printTheRightSound با استفاده از پولی مورفیسم به دنبال کلاس مورد نظر می گردد و تابع موجود در کلاس را صدا می زند .

ولی یک اشکال در این روش وجود دارد .. اگر بخواهیم چند صدا از دیگر حیوانات اضافه کنیم باید بدنه Else If را گسترش بدهیم که این روش خوانایی برنامه را پایین می آورد .. راه حل جالبی برای این کار در PHP وجود دارد . آن هم استفاده از توارث است .

این بار یک کلاس با نام Animal به برنامه اضافه می کنیم. به این کد با دقت نگاه کنید :

کد پی‌اچ‌پی:
class Animal {
    function 
makeSound()
    {
        print 
"Error: This method should be re-implemented in the children";
    }
}
class 
Cat extends Animal {
    function 
makeSound()
    {
        print 
"miau";
    }
}
class 
Dog extends Animal {
    function 
makeSound()
    {
        print 
"wuff";
    }
}
function 
printTheRightSound($obj)
{
    if (
$obj instanceof Animal
    {
        
$obj->makeSound();
    } 
    else 
    {
        print 
"Error: Passed wrong kind of object";
    }
    print 
"\n";
}
printTheRightSound(new Cat());
printTheRightSound(new Dog());

/* 
خروجی :

    miau
    wuff
*/ 
خب همونطور که دیدید مشکل گسترش بدنه Else If هم حل شد .
نیاز به توضیح خاصی نیست (اینجور که فکر می کنم). در صورت اینکه سوالی بود همینجا بپرسید
پولی مورفیسم واقعا سخته و پردازش هاي مخ آدم رو به بالاترين سطح مي رسونه (بهت حق مي دم)

ببينيد با دستور
کد پی‌اچ‌پی:
if ($obj instanceof Animal
چك مي كنيد كه آيا obj$ عضو يا همان كلاس Animal هست يا نه ؟
مي دونم كه متوجه نشدي .. خط به خط توضيح مي دم .. دقت كن .

كلاس Animal
کد پی‌اچ‌پی:
class Animal 
    function 
makeSound() 
    { 
        print 
"Error: This method should be re-implemented in the children"
    } 



كلاس cat فرزند Animal
کد پی‌اچ‌پی:
class Cat extends Animal 
    function 
makeSound() 
    { 
        print 
"miau"
    } 


كلاس dog فرزند Animal
کد پی‌اچ‌پی:
class Dog extends Animal 
    function 
makeSound() 
    { 
        print 
"wuff"
    } 


تابع printTheRightSound (اعلام خروجي)
کد پی‌اچ‌پی:
function printTheRightSound($obj

    if (
$obj instanceof Animal)  
    { 
        
$obj->makeSound(); 
    }  
    else  
    { 
        print 
"Error: Passed wrong kind of object"
    } 
    print 
"\n"


كد اصلي يا بدنه
کد پی‌اچ‌پی:
printTheRightSound(new Cat()); 
printTheRightSound(new Dog()); 

برنامه از قسمت بدنه يا اصلي اجرا مي شه . اين دستور رو اجرا مي كنيم.
کد پی‌اچ‌پی:
printTheRightSound(new Cat()); 
خط اول تابع printTheRightSound اجرا مي شه :
کد پی‌اچ‌پی:
if ($obj instanceof Animal
آيا obj$ فرزند يا خود كلاس Animal هست ؟ جواب : بله
خط بعد :
کد پی‌اچ‌پی:
$obj->makeSound(); 
چون ما شي Cat رو ارجا داديم .. مي ره سراغ تابع MakeSound در كلاس Cat :
کد پی‌اچ‌پی:
class Cat extends Animal 
    function 
makeSound() 
    { 
        print 
"miau"
    } 

رشته miau در خروجي چاپ مي شه .
همين كار ها براي Dog هم انجام مي شه .. اميد وارم كه جوابتون رو گرفته باشيد.


RE: توضیح روش پولی مورفیسم در شی گرایی - Na3r - ۱۳۸۸ شهریور ۰۳

به hidensfot ( محمد) عزیز

آقا خوش اومدی به iranphp


RE: توضیح روش پولی مورفیسم در شی گرایی - hidensoft - ۱۳۸۸ شهریور ۰۳

بابا خداییش بی معرفتید. من فکر میکردم بچه ها همه رفتن پی خودشون .. همه اینجا بودید هیشکی به من نگفت Sad


RE: توضیح روش پولی مورفیسم در شی گرایی - Alimokhlesi - ۱۳۸۸ شهریور ۰۳

با عرض سلام و خوش آمد گویی به شما دوست عزیز و البته نام آشنا ( فکر کنم شما رو از قبل میشناسم- البته این از سعادت منه )
ذکر نکاتی رو ضروری میدونم :
نقل قول:من نمی دونم چرا به برنامه نویسی Oop اصلا احمیت داده نمی شه ! واسه پیدا کردن یک کار معمولی هم حداقل شما باید Oop بلد باشی
در سازمان تخصصی برنامه نویسان PHP اینطور نیست . برای نمونه :

interface ها
ۀموزش شی گرایی
کلاس ها انتضاعی
ستر گتر یا همون اور لودینگ
تحلیل سیستم فروش هاستینگ
بیایید شی گرا فکر کنیم
برای تولید نرم افزار از کجا شروع کنیم

اینها بخش اعظمی است که می تونم بگم در راستای یکی از اهداف وسیاستگزاری های اولیه این سازمان ( تغییر در روش برنامه نویسان PHP و هدایت آنها به سمت کد نویسی شی گرا ) بوده.
پس کار انجام شده ( البته جای کار داره هنوز) - ان شاله انجام پروژه ی هاستینگ هم ادامه ی این روند خواهد بود. همچنین کار هایی دیگه ای که همه ازش خبر دارن.

توضیح تون بسیار جالب و جامع بود اما منم یه خورده اضافه کنم ( البته در تایید توضیحات شما ):
کلا مفهوم پلی مورفیسم یعنی انجام عملیاتی بایک نام ولی رفتار های متفاوت.
برای مثال من پترن رو مثال می زنم . فرض کنید سیستمی دارید که به کاربرانتون سرویس لاگین رو ارائه می ده. اگه کاربر شما از سیستم رایگان استفاده می کرد میاد و مثلا سرویس کنترل پنل عادی رو براش محیا می کنه و گرنه کنترل پنل حرفه ای رو. در این سیستم کاربر غیر عضو نداریم ( مثلا). تفاوت کنترل پنل ها به امکانات آونهاست :
کد پی‌اچ‌پی:
interface IUsersPanel
{
    public function 
ShowPanel();
}
class 
UserFree implements IUsersPanel 
{
     
    public function 
ShowPanel()
    {
        
//Get Object Of Message Center
        //Get Object Of Download Center 
        
    
}
}
class 
UserCemersialt implements IUsersPanel 
{
    public function 
ShowPanel()
    {
        
//Get Object Of Message Center
        //Get Object Of Download Center 
        //Get Object Of Mail Center
        //Get Object Of Upload Center
        //Get Object Of Search Center
    
}

دقت کنید ببینید که هر دوتابع شوپنل در ع=هر دو کلاس استفاده شده ولی هر کدوم کارای خودش ون رو انجام میدن
البته ما یه مثال عملی در پروژه هاستینگ داریم . از اونجا متوجه میشید که چه جوری باید از این خصوصیت استفاده کنید .

از محمد نیک نام عزیز هم ممنونم Heart Smile


RE: توضیح روش پولی مورفیسم در شی گرایی - hidensoft - ۱۳۸۸ شهریور ۰۳

نقل قول:با عرض سلام و خوش آمد گویی به شما دوست عزیز و البته نام آشنا ( فکر کنم شما رو از قبل میشناسم- البته این از سعادت منه )
سلام دوست عزیز ، از استقبال شما ممنونم. من متاسفانه نام کاربری خودم رو بجای hidensoft ، hidenstof وارد کردم .
نقل قول:در سازمان تخصصی برنامه نویسان PHP اینطور نیست . برای نمونه :
کوتاهی از بنده هست ، این پست مربوط به یکی دو سال پیش هست و من فقط برای اینکه اشکال دوستمون حل بشه این دو تاپیک رو اینجا آوردم..

با شناختی که من نسبت به وحید دارم ( هرچند مدت زمان زیادی هست که با هم صحبت نکردیم ، چیزی نزدیک به دو سال ) اما مطمئنم که روی این موضوع تاکید زیادی داره...

موفق باشید


RE: توضیح روش پولی مورفیسم در شی گرایی - zoghal - ۱۳۸۸ شهریور ۰۴

محمد جان خوش آمدی.
اما فیلم بازی نکن من خودم بهت اطلاع دادم هم به شما هم به حمید