مفهوم جایگزینی لیسکو (Lisko Substitution Principle) در برنامه نویسی

پیش نیاز این درس:

برای درک بهتر این مبحث ابتدا باید با کلاس ها و Interfaceها آشنایی داشته باشید. همچنین درس های ابتدا مفهوم SOLID را خوانده باشید

مدرس: مسعود کاویانی

در درس های گذشته، با دو حرف اول SOLID آ شنا شدیم. ابتدا Single Responsibility را بحث کردیم و سپس به مفهوم Open Closed پرداختیم. در این درس میخواهیم به سومین حرف از مفهوم SOLID بپردازیم که به آن Lisko Substitution Principle یا همان مفهوم جایگزینی لیسکو میگویند. در میان مفاهیم موجود در SOLID شاید این مفهوم برای درک شدن کمی نیاز به تفکر بیشتری داشته باشد.

این مفهوم به صورت زیر تعریف می شود:

اگر یک موجودیت مثلا کلاس S زیر مجموعه یک کلاس T باشد (برای مثال از آن ارث برده باشد)، اشیایی که از نوع T هستند باید بتواند با اشیایی که از نوع S هستند، جایگزین شوند. این جایگزینی نباید باعث تغییر در ویژگی های مطلوب T شود.

قبول داریم که تعریف بالا، تعریفی نسبتا مجرد و کمی تا قسمتی پیچیده بود. اجازه دهید با یک مثال کلاسیک، این مفهوم را شرح دهیم.

فرض کنید دو کلاس دارید. یکی کلاس Rectangle (یعنی چهارضلعی) و یک کلاس Square (یعنی مربع). در دنیای واقعی، مربع یک چهارضلعی است. یعنی میتوان مربع را یک کلاس زیر مجموعه از چهار ضلعی در نظر گرفت. پس نگاهی به تکه کد زیر با زبان PHP بیندازید:

<?php

class Rectangle
{
    protected $width;
    protected $height;

    public function setWidth ($width)
    {
        $this->width = $width;
    }

    public function getWidth ()
    {
        return $this->width;
    }

    public function setHeight ($height)
    {
        $this->height = $height;
    }

    public function getHeight ()
    {
        return $this->height;
    }
}

class Square extends Rectangle
{
    public function setWidth ($width)
    {
        $this->width = $width;
        $this->height = $width;
    }

    public function setHeight ($height)
    {
        $this->height = $height;
        $this->width = $height;

    }
}

?>

همان طور که مشاهده میکنید در کد بالا، کلاس مربع از کلاس چهارضلعی مشتق شده است. از آن جایی که اندازه اضلاع مربع مساوی هستند، در کلاس مربع، مثلا با تغییر ضلع عرض مربع، طول مربع را هم تغییر می دهیم. این کار باعث ایجاد یک سری مشکل در فرآیندهای نرم افزاری می شود.

برای تمرین بر روی این قضیه فکر کنید که این مدل کدنویسی چه مشکلاتی را میتواند بعدا به وجود آورد. برای راهنمایی فرض کنید یک کلاس دارید که ورودی آن یکی از زیرنوع های کلاس چهارضلعی است و نمی دانیم آن چیست. حال در بسیاری از موارد انتظار نداریم که با تغییر عرض یک چهار ضلعی، طول آن هم عوض شود! ولی اگر آن زیر نوع مربع باشد این اتفاق خواهد افتاد و مشکلات بعدی را به وجود خواهد آورد

منابع این بحث و اطلاعات بیشتر

» وب سایت Medium

» وب سایت DZone

» ویکیپدیا

» وب سایت Medium

» وب سایت tutsplus

» کتاب توسعه چابک نرم افزار

» وب سایت Tomdalling

در صورت تمایل به یادگیری بیشتر، منابع بالا در نظر گرفته شده است. می توانید با خواندن این منابع، به یادگیری خود در این زمینه عمق ببخشید

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *