SOLID مخفف پنج اصل در برنامه نویسی شی گرایی می باشد که توسط رابرت سی مارتین مطرح شده است.با استفاده از این اصول انعطاف پذیری و گسترش در توسعه و نگهداری نرم افزار راحتر صورت می گیرد.
1- Single Responsibility
هر کلاس باید تنها یک مسئولیت داشته باشد.
اگر یک کلاس تابع های مختلفی داشته باشد، احتمال ایجاد خطا در آن افزایش می یابد، زیرا ایجاد تغییرات در یکی از توابع، می تواند در خروجی و ورودی توابع دیگر تاثیر بگذارد. رعایت اصل تک مسئولیتی هم پیچیدگی ها را کاهش میدهد و هم سرعت توسعه را بالا میبرد.
2- Open/Closed
کلاس ها برای توسعه باید باز باشند ولی برای ویرایش بسته.
تغییر رفتار فعلی یک کلاس بر تمام قسمت های نرم افزار که از آن کلاس استفاده می کنند تأثیر می گذارد. اگر میخواهید کلاس توابع بیشتری داشته باشد،طبق این اصل می توانید یک کلاس را extend کنید ودر کلاس فرزند، توابع و متد های جدید بسازید، اما نباید کلاس اصلی را تغییر دهید.هدف این اصل گسترش رفتار یک کلاس بدون تغییر رفتار کلاس اصلی است. استفاده از این اصل از بروز مشکل و خطا های احتمالی در بخش هایی که از کلاس استفاده شده است جلوگیری می کند.
3-Liskov Subtitution
به بیان ساده، اگر کلاس A یک زیرگروه از کلاس B باشد، باید بتوانیم B را با A جایگزین کنیم بدون اینکه رفتار برنامه ما مختل شود.
4- Interface Segregation
زمانی که یک کلاس از یک interface ارث بری می کند لازم نباشد متد هایی که قرار نیست از آن استفاده کند پیاده سازی شود
ما باید interface ها را تا حد امکان کوچک کنیم . به جای یک کلاس پایه بزرگ، باید آنها را به چند دسته تقسیم کنیم که هر کدام متد های مربوط به خود را داشته باشند.کلاس ها نباید متد هایی که به آن نیازی ندارند را اجرا کنند در صورت نیاز می توان چندین اینترفیس را داخل کلاس implement کرد.
5- Dependency Inversion
کلاس های سطح بالا نباید به کلاس های سطح پایین وابستگی داشته باشند بلکه هر دو باید به کلاس های انتزاعی(abstarct) وابسته باشند.
اگر در کد شما رابط های انتزاعی به خوبی تعریف شده باشند، تغییر پیاده سازی یک کلاس نباید کدهای شما را خراب کند.
کلاس های سطح بالا، که منطق پیچیده تری را ارائه می دهند، باید به راحتی قابل استفاده مجدد باشند و تحت تأثیر تغییرات کلاس های سطح پایین که ویژگی های کاربردی را ارائه می دهند، قرار نگیرند.