درباره اصل Liskov

پرسیده شده
فعالیت 1113 روز پیش
دیده شده 562 بار
1

سلام و خسته نباشد

 

دوتا سوال داشتم از خدمتتون

 

۱. هدف اصل interface segregation اینه که هر زیر کلاس فقط متدهایی که لازم داره رو پیاده سازی کنه اما هدف Liskov چیه؟

 

۲. جایی که اصل interface segregation نقض میشه خود به خود اصل liskov هم نقض میشه؟

فایل پیوست

علی.
علی.

25 فروردین 00

3
حذف شده

سلام و احترام

تمرکز liskov روی کلاس هایی هستند که دارن یه interface رو implement میکنن اما اصل interface segregation  تمرکزش روی خود اون interfaceها هستش.

اصل liskov میخواد مطمئن بشه که تمامی subclass هایی که interfaceی رو implement کردن رفتار شبیه به پدرشون رو داشته باشن.

یه مثال خیلی ساده از liskov اینکه که شما یه interface دارید که داخلش متد beBabaZangBezan رو داره، به نظر شما کلاس Payment میتونه به باباش زنگ بزنه (beBabaZangBezan )؟ قطعا ن، پس شما یه interface رو میسازید به اسم ableToCallToDad و یه متد داخل به اسم call، ینی اینکه هر کلاسی این interface رو پیاده سازی کنه مطمئنیم که میتونه به باباش زنگ بزنه. 

حالا اگه شما بیایید این interface رو برای payment implement کنید قطعا این اصل رو نقص کردی چون اصلا کلاس payment همچین کاری رو نمیکنه

 

 

اما اصل interface segregation

به طور خلاصه این اصل میگه که رفتارهای متفاوت رو کنار هم نچین! ینی اینکه برای هر وظیفه ای یه interface جدا بساز، مثال:

  interface Animal {
        public function fly();
        public function eat();
 }

interface بالا برای حیوانات هستش، به نظر شما همه ی حیوانات میتونن پرواز هم کنن؟ خیر، پس داره این اصل رو نقص میکنه و باید این دوتا رفتار رو از هم جدا کنیم

interface Flyable {
     public function fly()
}
interface Feedable {
    public function eat()
}

 

 

فایل پیوست

امیر صالحی

توسط

امیر صالحی

25 فروردین 00

حذف شده
ممنون از پاسختون. طبق چیزی که گفتید (اصل liskov میخواد مطمئن بشه که تمامی subclass هایی که interfaceی رو implement کردن رفتار شبیه به پدرشون رو داشته باشن.) میشه گفت اصل liskov میخواد مطمئن بشه که تمامی subclass ها مثل پدرشون رفتار میکنن تا اگه خواستیم بجای subclass ها از کلاس پایشون استفاده کنیم به خطایی بر نخوریم. درسته ؟
علی.

26 فروردین 00

حذف شده
توی این اصل وقتی subclass ها رفتار شبیه به هم رو داشته باشند شما میتونید خیلی راحت subclass هارو به جای هم استفاده کنید، توی مثال پرداخت که استاد خودشون توضیح دادند گفتند که من وقتی بخوام از یه روش پرداخت دیگه استفاده کنم خیلی راحت میدونم که متد pay رو داره و پرداخت رو باهاش انجام میدم
امیر صالحی

26 فروردین 00

جلسه Liskov Substitution Principle