/
  • توضیح روش پولی مورفیسم در شی گرایی

  • ارسال پاسخ   امتیاز موضوع:
    • 2 رأی - میانگین امیتازات: 4.5
    • 1
    • 2
    • 3
    • 4
    • 5

    حالت موضوعی | حالت خطی توضیح روش پولی مورفیسم در شی گرایی
    نویسنده پیام
    zoghal آفلاین
    صالح سوزنچی
    *****

    ارسال‌ها: 1,766
    تاریخ عضویت: ۱۳۸۷ دي ۲۵
    اعتبار: 23
    تشکرها : 1500
    ( 1729 تشکر در 992 ارسال )
    ارسال: #1
    توضیح روش پولی مورفیسم در شی گرایی
    دوستان و اساتید بزرگ ممنون میشم در مورد روش مولی مورفیسم توضیح کاملی ارائه بدن
    ۱۳۸۸ مرداد ۱۶ ۰۵:۱۳ صبح
    یافتن ارسال‌ها WWW پاسخ با نقل قول
     تشکر شده توسط :
    Alimokhlesi آفلاین
    مدیر کل
    **********

    ارسال‌ها: 457
    تاریخ عضویت: ۱۳۸۷ آذر ۲۵
    اعتبار: 13
    تشکرها : 601
    ( 1126 تشکر در 412 ارسال )
    ارسال: #2
    RE: توضیح روش پولی مورفیسم در شی گرایی
    پولی مورفیسم یا چند ریختی یعنی اینکه یک کار با روشهای انجام متفاوت تو سیستم مورد نظر شما وجود داشته باشه.
    به عنوان مثال شما همیشه میاید و یه رشته ای رو در خورجی چاپ میکنید . .لی در اشیاء و کلاس های مختلف رنگ و فونت و سایز انها باهم متفاوته . در چنین شرایطی ساختار همه ی کلاس های شما از متد به نامPrintText برخوردارن ولی هر کدوم محتوای و روش اجرای خاص خودشون رو دارن. برای اینکار میان یه کلاس ابسترکاکت یا یه اینترفیس تعریف میکنن و این متدو رو تواون تعریف میکنن. بعد همه ی کلاس هایی که از این ساختار استفاده میکنن میان از اون کلاسه ارث میبرن و یا از اون اینترفیسه ایمپلیمنت میگیرن.
    __________________________________________________________________________
    علم تاج افتخار دنیا و یادگار پس از مرگ است
    ۱۳۸۸ مرداد ۱۶ ۱۱:۰۰ صبح
    یافتن ارسال‌ها WWW پاسخ با نقل قول
     تشکر شده توسط :
    zoghal آفلاین
    صالح سوزنچی
    *****

    ارسال‌ها: 1,766
    تاریخ عضویت: ۱۳۸۷ دي ۲۵
    اعتبار: 23
    تشکرها : 1500
    ( 1729 تشکر در 992 ارسال )
    ارسال: #3
    RE: توضیح روش پولی مورفیسم در شی گرایی
    ممنون یک نمونه کوچیک می تونید واسم بزنید؟
    ۱۳۸۸ مرداد ۱۶ ۱۱:۱۶ صبح
    یافتن ارسال‌ها WWW پاسخ با نقل قول
     تشکر شده توسط :
    hidensoft آفلاین
    عضو ارشد
    *****

    ارسال‌ها: 1,384
    تاریخ عضویت: ۱۳۸۸ شهريور ۳
    اعتبار: 46
    تشکرها : 729
    ( 1394 تشکر در 782 ارسال )
    ارسال: #4
    RE: توضیح روش پولی مورفیسم در شی گرایی
    سلام
    من نمی دونم چرا به برنامه نویسی 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]هست .

    کد PHP:
    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 به برنامه اضافه می کنیم. به این کد با دقت نگاه کنید :

    کد PHP:
    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 هم حل شد .
    نیاز به توضیح خاصی نیست (اینجور که فکر می کنم). در صورت اینکه سوالی بود همینجا بپرسید
    پولی مورفیسم واقعا سخته و پردازش هاي مخ آدم رو به بالاترين سطح مي رسونه (بهت حق مي دم)

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

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



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


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


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

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


    كد اصلي يا بدنه
    کد PHP:
    printTheRightSound(new Cat()); 
    printTheRightSound(new Dog()); 

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

    رشته miau در خروجي چاپ مي شه .
    همين كار ها براي Dog هم انجام مي شه .. اميد وارم كه جوابتون رو گرفته باشيد.
    (آخرین ویرایش در این ارسال: ۱۳۸۸ شهريور ۳ ۰۱:۴۸ عصر، توسط hidensoft.)
    ۱۳۸۸ شهريور ۳ ۰۱:۴۲ عصر
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط : Alimokhlesi zoghal amir.s behrooz_heyhu mojtabadj mooosti
    Na3r آفلاین
    ناصر خلقی
    *****

    ارسال‌ها: 412
    تاریخ عضویت: ۱۳۸۷ دي ۳
    اعتبار: 11
    تشکرها : 257
    ( 576 تشکر در 308 ارسال )
    ارسال: #5
    RE: توضیح روش پولی مورفیسم در شی گرایی
    به hidensfot ( محمد) عزیز

    آقا خوش اومدی به iranphp
    ۱۳۸۸ شهريور ۳ ۰۲:۰۴ عصر
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط : zoghal
    hidensoft آفلاین
    عضو ارشد
    *****

    ارسال‌ها: 1,384
    تاریخ عضویت: ۱۳۸۸ شهريور ۳
    اعتبار: 46
    تشکرها : 729
    ( 1394 تشکر در 782 ارسال )
    ارسال: #6
    RE: توضیح روش پولی مورفیسم در شی گرایی
    بابا خداییش بی معرفتید. من فکر میکردم بچه ها همه رفتن پی خودشون .. همه اینجا بودید هیشکی به من نگفت Sad
    ۱۳۸۸ شهريور ۳ ۰۲:۱۲ عصر
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط :
    Alimokhlesi آفلاین
    مدیر کل
    **********

    ارسال‌ها: 457
    تاریخ عضویت: ۱۳۸۷ آذر ۲۵
    اعتبار: 13
    تشکرها : 601
    ( 1126 تشکر در 412 ارسال )
    ارسال: #7
    RE: توضیح روش پولی مورفیسم در شی گرایی
    با عرض سلام و خوش آمد گویی به شما دوست عزیز و البته نام آشنا ( فکر کنم شما رو از قبل میشناسم- البته این از سعادت منه )
    ذکر نکاتی رو ضروری میدونم :
    نقل قول: من نمی دونم چرا به برنامه نویسی Oop اصلا احمیت داده نمی شه ! واسه پیدا کردن یک کار معمولی هم حداقل شما باید Oop بلد باشی
    در سازمان تخصصی برنامه نویسان PHP اینطور نیست . برای نمونه :

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

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

    توضیح تون بسیار جالب و جامع بود اما منم یه خورده اضافه کنم ( البته در تایید توضیحات شما ):
    کلا مفهوم پلی مورفیسم یعنی انجام عملیاتی بایک نام ولی رفتار های متفاوت.
    برای مثال من پترن رو مثال می زنم . فرض کنید سیستمی دارید که به کاربرانتون سرویس لاگین رو ارائه می ده. اگه کاربر شما از سیستم رایگان استفاده می کرد میاد و مثلا سرویس کنترل پنل عادی رو براش محیا می کنه و گرنه کنترل پنل حرفه ای رو. در این سیستم کاربر غیر عضو نداریم ( مثلا). تفاوت کنترل پنل ها به امکانات آونهاست :
    کد 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
    __________________________________________________________________________
    علم تاج افتخار دنیا و یادگار پس از مرگ است
    ۱۳۸۸ شهريور ۳ ۰۲:۲۵ عصر
    یافتن ارسال‌ها WWW پاسخ با نقل قول
     تشکر شده توسط : mohsened
    hidensoft آفلاین
    عضو ارشد
    *****

    ارسال‌ها: 1,384
    تاریخ عضویت: ۱۳۸۸ شهريور ۳
    اعتبار: 46
    تشکرها : 729
    ( 1394 تشکر در 782 ارسال )
    ارسال: #8
    RE: توضیح روش پولی مورفیسم در شی گرایی
    نقل قول: با عرض سلام و خوش آمد گویی به شما دوست عزیز و البته نام آشنا ( فکر کنم شما رو از قبل میشناسم- البته این از سعادت منه )
    سلام دوست عزیز ، از استقبال شما ممنونم. من متاسفانه نام کاربری خودم رو بجای hidensoft ، hidenstof وارد کردم .
    نقل قول: در سازمان تخصصی برنامه نویسان PHP اینطور نیست . برای نمونه :
    کوتاهی از بنده هست ، این پست مربوط به یکی دو سال پیش هست و من فقط برای اینکه اشکال دوستمون حل بشه این دو تاپیک رو اینجا آوردم..

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

    موفق باشید
    (آخرین ویرایش در این ارسال: ۱۳۸۸ شهريور ۳ ۱۰:۴۰ عصر، توسط hidensoft.)
    ۱۳۸۸ شهريور ۳ ۱۰:۳۹ عصر
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط :
    zoghal آفلاین
    صالح سوزنچی
    *****

    ارسال‌ها: 1,766
    تاریخ عضویت: ۱۳۸۷ دي ۲۵
    اعتبار: 23
    تشکرها : 1500
    ( 1729 تشکر در 992 ارسال )
    ارسال: #9
    RE: توضیح روش پولی مورفیسم در شی گرایی
    محمد جان خوش آمدی.
    اما فیلم بازی نکن من خودم بهت اطلاع دادم هم به شما هم به حمید
    ۱۳۸۸ شهريور ۴ ۰۹:۵۸ صبح
    یافتن ارسال‌ها WWW پاسخ با نقل قول
     تشکر شده توسط :
    « قدیمی تر | تازه‌ تر »

    ارسال پاسخ
    پرش به انجمن:


    کاربرانِ درحال بازدید از این موضوع: 1 مهمان
    IranPHP.org | تماس با ما | بازگشت به بالا | بازگشت به محتوا | بایگانی | پیوند سایتی RSS