🎉 سال نو، مهارت نو، مشاوره رایگان نقشه راه برنامه نویسی (آفر ویژه ثبت نام قبل از افزایش قیمت 🔥)
۰ ثانیه
۰ دقیقه
۰ ساعت
۱ علی
درباره اصل Liskov
امیر صالحی حل شده توسط امیر صالحی

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

 

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

 

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

 

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

سلام و احترام

تمرکز 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()
}

 

 

بهترین پاسخ
امیر صالحی ۲۵ فروردین ۱۴۰۰، ۱۶:۳۰