The term SOLID is a mnemonic acronym for five design principles intended to make software designs more understandable, flexible and maintainable. The principles are a subset of many principles promoted by Robert C. Martin. Though they apply to any object-oriented design, the SOLID principles can also form a core philosophy for methodologies such as agile development or Adaptive Software Development.
- S - Single-responsiblity principle
- O - Open-closed principle
- L - Liskov substitution principle
- I - Interface segregation principle
- D - Dependency Inversion Principle
- A class should have one and only one reason to change, meaning that a class should have only one job.
- Objects or entities should be open for extension, but closed for modification.
Liskov substitution principle¶
- Let q(x) be a property provable about objects of x of type T. Then q(y) should be provable for objects y of type S where S is a subtype of T.
Interface segregation principle¶
- A client should never be forced to implement an interface that it doesn't use or clients shouldn't be forced to depend on methods they do not use.
Dependency Inversion Principle¶
- Entities must depend on abstractions not on concretions. It states that the high level module must not depend on the low level module, but they should depend on abstractions.