> For the complete documentation index, see [llms.txt](https://4m9fka.gitbook.io/pdp/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://4m9fka.gitbook.io/pdp/base-it-knowledge/oop/solid.md).

# SOLID

## Concepts

#### Single responsibility

A [class](https://en.wikipedia.org/wiki/Class_\(computer_programming\)) should only have a single responsibility, that is, only changes to one part of the software's specification should be able to affect the specification of the class.

#### Open-closed

"Software entities ... should be open for extension, but closed for modification."

#### Liskov substitution principle

"Objects in a program should be replaceable with instances of their subtypes without altering the correctness of that program." See also [design by contract](https://en.wikipedia.org/wiki/Design_by_contract).

#### Interface segregation principle

"Many client-specific interfaces are better than one general-purpose interface." (**functions abstract classes**)

#### Dependency inversion principle&#x20;

One should "depend upon abstractions, \[not] concretions."

IoC or Hof

todo:

{% hint style="info" %}
todo:\
examples

DI in react

{% endhint %}

### &#x20;Useful links

* <https://habr.com/ru/company/ruvds/blog/426413/>
* <https://getinstance.info/articles/good-code-principles/solid-single-responsibility-javascript/>
* <http://blog.wolksoftware.com/the-current-state-of-dependency-inversion-in-javascript>
