SOLID principles

SOLID is an acronym for five design principles intended to make object-oriented designs more flexible and maintainable.
The SOLID ideas are
* The single-responsibility principle: "There should never be more than one reason for a class to change." In other words, every class should have only one responsibility.
* The open–closed principle: "Software entities ... should be open for extension, but closed for modification."
* The Liskov substitution principle: "Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it." 
* The interface segregation principle: "Clients should not be forced to depend upon interfaces that they do not use."
* The dependency inversion principle: "Depend upon abstractions, not concretions."