سلام.
توی مثالی که توی این جلسه زده شد متد pay توی هر دو اینترفیس تکرار شده. بهتر نیست این برنامه رو اینجوری Refactor کنیم؟
interface Payable { public function pay(); } interface Verifiable { public function verify(); } class OnlinePayment implements Payable, Verifiable { public function pay() { // TODO: Implement pay() method. } public function verify() { // TODO: Implement verify() method. } } class OfflinePayment implements Payable { public function pay() { // TODO: Implement pay() method. } }
اصل ISP توی این برنامه رعایت شده ولی اصل LSP رعایت نمیشه چون توی اصل LSP میگیم کلاسها باید بتونن راحت باهم جایگزین بشن ولی اینجوری با جایگزین کردن این کلاسها برنامه به مشکل میخوره چون مثلا کلاس آنلاین پیمنت دوتا متد پیاده میکنه ولی آفلاین پیمنت فقط یدونه متد اینا اگه با هم جابجا بشن برنامه به مشکل نمیخوره؟
دقیقا مثالی هم که توی ویدیو زده شد همینجوریه یک کلاس دو تا متد پیاده میکنه ولی یه کلاس دیگه یک متد