اصول SOLID به زبان ساده - اصل اول
اصول SOLID به زبان ساده - اصل دوم
اصول SOLID به زبان ساده - اصل سوم
اصل چهارم از SOLID اصل جداسازی اینترفیسها یا Interface Segregation Principle هست که به اختصار ISP گفته میشه. توضیح رسمی و آکادمیک این اصل بصورت زیر هست:
کلاسها نباید مجبور باشن متدهایی که به اونها احتیاجی ندارن رو پیادهسازی کنن
این اصل میگه که ما باید اینترفیس (Interface) ها رو جوری بنویسیم که وقتی یک کلاس از اون استفاده میکنه، مجبور نباشه متدهایی که لازم نداره رو پیادهسازی کنه. یعنی متدهای بیربط نباید توی یک اینترفیس کنار هم باشن. این اصل شباهت زیادی به اصل اول SOLID داره که میگه کلاسها باید فقط مسئول انجام یک کار باشن.
اینترفیس زیر رو درنظر بگیرید:
interface Animal { fly(); run(); eat(); }
این اینترفیس سه متد داره که باید توسط کلاسهایی که ازش استفاده میکنن پیادهسازی بشه. کلاس Dolphin
(دلفین) رو در نظر بگیرید که از این اینترفیس استفاده میکنه:
class Dolphin implements Animal { public fly() { return false; } public run() { // Run } public eat() { // Eat } }
همونطور که میدونید، دلفینها نمیتونن پرواز کنن. پس ما مجبور شدیم توی متد fly
بنویسیم return false
. اینجا قانون ISP نقض شد. چون کلاس دلفین مجبور به پیادهسازی متدی شد که از اون استفاده نمیکنه.
اگه بخوایم این اصل رو رعایت کنیم باید جداسازی اینترفیس انجام بدیم. پس متد fly
رو به یک اینترفیس جدا منتقل میکنیم:
interface Animal { run(); eat(); } interface FlyableAnimal { fly(); }
بنابراین کلاس دلفین دیگه مجبور نیست متد fly
رو پیادهسازی کنه و کلاسهایی که به این متد نیاز دارن، اینترفیس FlyableAnimal
رو هم پیادهسازی میکنن:
class Dolphin implements Animal { public run() { // Run } public eat() { // Eat } } class Bird implements Animal, FlyableAnimal { public run() { /* ... */ } public eat() { /* ... */ } public fly() { /* ... */ } }
رعایت کردن این اصل به ما کمک میکنه کدهای خواناتر و تمیزتری داشته باشیم. توی شیگرایی باید یک نکته رو درنظر داشته باشیم که هر چی از کلینویسی (عمومینویسی) دوری کنیم و کدهایی داشته باشیم که مجزا و تفکیک شده باشن، برنامهای منسجمتر و ساختاریافتهتر خواهیم داشت. بنابراین کدها قابل استفاده مجدد میشن، تست و Refactor هم راحتتر انجام میشه.
اصول SOLID به زبان ساده - اصل پنجم