Что такое SOLID?

Неоднократно слышал про некий паттерн (или не паттерн, не уверен) SOLID. Что это такое и "с чем это едят"?

SOLID часто относят к паттернам, но ЭТО НЕ ТАК. SOLID это группа из 5 принципов проектирования кода.

S - single responsibility (у класса есть только 1 причина для изменения)

O - open/closed (открыто для расширения, закрыто для изменения)

L - Liskov substitution (вместо базового типа можно подставить подтип)

I - interface segregation (нет зависимости от неиспользуемых методов)

D - dependency inversion (верхний уровень не зависит от нижнего, но все зависят от абстракции)