The SOLID design principles were promoted by Robert C. Martin and are some of the best-known design principles in object-oriented software development.
SOLID is a mnemonic acronym for the following five principles:
The Single-responsibility principle: a class 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.[5]
The Open–closed principle: "software entities ... should be open for extension, but closed for modification."[6]
The Liskov substitution principle: "objects in a program should be replaceable with instances of their subtypes without altering the correctness of that program." It extends the Open/Closed principle and enables you to replace objects of a parent class with objects of a subclass without breaking the application. This requires all subclasses to behave in the same way as the parent class. To achieve that, your subclasses need to follow these rules:
The Interface segregation principle: "many client-specific interfaces are better than one general-purpose interface."[8][4]
The Dependency inversion principle:
The SOLID acronym was introduced later in 2004 or thereabouts by Michael Feathers.[10] Although 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.[3]`