SOLID

In software programming, SOLID is a mnemonic acronym for five design principles intended to make object-oriented designs more understandable, flexible, and maintainable. Although the SOLID principles apply to any object-oriented design, they can also form a core philosophy for methodologies such as agile development or adaptive software development.

Principles

 * 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.
 * Open–closed principle: "Software entities ... should be open for extension, but closed for modification."
 * Liskov substitution principle: "Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it." See also design by contract.
 * Interface segregation principle: "Clients should not be forced to depend upon interfaces that they do not use."
 * Dependency inversion principle: "Depend upon abstractions, [not] concretes."

Origin
Software engineer and instructor, Robert C. Martin,  introduced the collection of principles in his 2000 paper Design Principles and Design Patterns about software rot. The SOLID acronym was coined around 2004 by Michael Feathers.