SOLID دربرگیرنده ی اصولی در برنامه نویسی شیء گرایی است که در اوایل سال 2000 توسط مهندسی به نام Robert Martin ابداع شد. وقتی این اصول به درستی در کنار یکدیگر به کار گرفته شوند، این امکان را به برنامه نویس یا توسعهدهنده میدهند تا با سهولت بیشتری به توسعه ی نرم افزارهای خود بپردازد. علاوه بر این، به کارگیری اصول SOLID این امکان را به برنامه نویسان خواهد داد تا با رویکردی سریع به توسعه ی نرم افزارهای خود پرداخته، از مرتکب شدن اشتباهات کوچک جلوگیری کنند و در صورت نیاز هم به سادگی اقدام به بازنویسی کدهای خود کنند.
SOLID مخفف کلمات زیر است:
S: Single Responsibility
O: Open / Closed
L: Liskov Substitution
I: Interface Segregation
D: Dependency Inversion
Single Responsibility
این اصل که به طور خلاصه SRP نیز خوانده می شود، بدین معنی که هر کلاس باید یک وظیفه داشته باشد که در این صورت، کلاسها فقط و فقط به خاطر ایجاد تغییر در وظیفهای که انجام میدهند دستخوش تغییر خواهند شد. کلاسها میتوانند Behavior های مختلفی داشته باشند اما تمامی آنها می بایست مربوط به یک حوزه بوده و مربوط به هم باشند.
Open-closed
کلاسهایی که ما در شیء گرایی ایجاد میکنیم باید برای توسعه یافتن قابلیتهایشان Open باشند یعنی «دست برنامه نویس برای توسعه ی کلاس باز باشد» اما اگر برنامه نویس خواست تا تغییری در کلاس ایجاد کند، چنین امکان می بایست Closed باشد.
برای مثال زمانی که در طول توسعه نرم افزار اگر نیاز به افزودن امکان جدیدی در برنامه باشد دست برنامه نویس برای این تغییرات جدید باز است ولی بصورت افزودن بصورت کد جدید باشد و نه تغییر در کدهای قبلی
Liskov Substitution
طبق این اصل کلاس فرزند باید از تمامی امکانات کلاس والد خود استفاده کند و آنها را به نحوی پیاده سازی کند که بتوان همان رفتاری که با کلاس والد داشت را با کلاس فرزند هم انجام داد
Interface Segregation
بر اساس این اصل، باید از چندین اینترفیس تک منظوره استفاده کرد تا استفاده از یک اینترفیس چند منظوره.
Dependency Inversion
بطور خلاصه در این اصل باید وابستگی کلاس ها بهم دیگر را تا حذف کرد بدین صورت که ابجکتهای high-level و low-level نباید بهم وابسته باشند و باید از یک وابستگی abstractions استفاده کنند