abstract در برنامه نویسی OOP

D.A.V.O.O.D

Member
سلام دوستان ،
در مورد abstract توی سایت php.net مطالعه می کردم که به یک قضیه ای بر خوردم .

این مثال توی سایت php.net ارائه شده :
PHP:
<?php
abstract class AbstractClass
{
    // Force Extending class to define this method
    abstract protected function getValue();
    abstract protected function prefixValue($prefix);

    // Common method
    public function printOut() {
        print $this->getValue() . "\n";
    }
}

class ConcreteClass1 extends AbstractClass
{
    protected function getValue() {
        return "ConcreteClass1";
    }

    public function prefixValue($prefix) {
        return "{$prefix}ConcreteClass1";
    }
}

class ConcreteClass2 extends AbstractClass
{
    public function getValue() {
        return "ConcreteClass2";
    }

    public function prefixValue($prefix) {
        return "{$prefix}ConcreteClass2";
    }
}

$class1 = new ConcreteClass1;
$class1->printOut();
echo $class1->prefixValue('FOO_') ."\n";

$class2 = new ConcreteClass2;
$class2->printOut();
echo $class2->prefixValue('FOO_') ."\n";
?>

من این مثال را یکمی دستکاری کردم ( abstract هارو برداشتم ) ولی در عمل متوجه تغییری نشدم !
PHP:
<?php
class AbstractClass
{
    // Common method
    public function printOut() {
        print $this->getValue() . "\n";
    }
}

class ConcreteClass1 extends AbstractClass
{
    protected function getValue() {
        return "ConcreteClass1";
    }

    public function prefixValue($prefix) {
        return "{$prefix}ConcreteClass1";
    }
}

class ConcreteClass2 extends AbstractClass
{
    public function getValue() {
        return "ConcreteClass2";
    }

    public function prefixValue($prefix) {
        return "{$prefix}ConcreteClass2";
    }
}

$class1 = new ConcreteClass1;
$class1->printOut();
echo $class1->prefixValue('FOO_') ."\n";

$class2 = new ConcreteClass2;
$class2->printOut();
echo $class2->prefixValue('FOO_') ."\n";
?>
می خواستم بدونم که abstract به چه دردی می خوره وقتی که بود و نبودش فرقی نداره ؟ :دی

ممنون
 
بسم الله الرحمن الرحیم
سلام
منم هیچی از abstract نمی دونستم
یکمی سرچ کردم و اون نتایجی که کمک کرد بفهمم به چه دردی می خوره ( بود و نبودش )
این مثال و توضیحاتش رو بخون:
http://www.php.net/manual/en/language.oop5.abstract.php#95404
و برای درک بیشتر بعد از این مثال بالا این مثال پایین رو بخون:
http://www.php.net/manual/en/language.oop5.abstract.php#75990

اون یکی مثال ها رو با توضیحاتش بخون / یه چیزهایی دستگرت می شه

من اینطوری فهمیدم که مثلا با این abstract می شه به کدها نوعی نظم داد ( شایدم من اشتباه برداشت کردم ) /
که مثلا از یه کدی همه جا استفاده می کنیم ( وقتی استفاده می کنیم برخی جاهاشو ویرایش می کنیم ) پس در این صورت می یاییم یه هسته از این کدمون در می یاریم و به صورت abstract در می یاریم و الان یه هسته داریم و هر جا خواستیم لودش می کنیم و کدهامون رو نسبت به هسته می نویسم و استفاده می کنیم ( به نوعی دیگه مجبور نیستیم 10 ساعت بشینیم کدهامون رو تماشا کنیم که ببینیم واسه کار فعلی کدوم جاها باید ویرایش بشه / چون یه هسته داریم و باید قسمت های مشخص شده رو به نوعی در کلاس فرزند تغییر ( ایجاد ) بکنیم ) و کارمون نظم پیداا می کنه و سرعت کارمون هم بالا می ره { نمی دونم تونستم خوب توضیح بدم یا نه }

البته من اینطوری برداشت کردم / شاید هدف اصلیش چیز دیگه ای باشه
بهتره شما هم یه سرچی بکنید
 
این اضافه کنم که وقی متدی رو abstract تعریف میکنیم حتما باید این متد رو در کلاس فرزند تعریف کنیم
 

جدیدترین ارسال ها

بالا