SOLID (object-oriented design)
In object-oriented computer programming, 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. The SOLID acronym was introduced by Michael Feathers.
- Single responsibility principle
- a class should have only a single responsibility (i.e. changes to only one part of the software's specification should be able to affect the specification of the class).
- Open/closed principle
- "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.
- Interface segregation principle
- "many client-specific interfaces are better than one general-purpose interface."
- Dependency inversion principle
- one should "depend upon abstractions, [not] concretions."
- Code reuse
- Inheritance (object-oriented programming)
- Package principles
- Don't repeat yourself
- GRASP (object-oriented design)
- KISS principle
- You aren't gonna need it
- Robert C. Martin. "Principles Of OOD". butunclebob.com. Retrieved 2014-07-17.. (Note the reference to “the first five principles”, though the acronym is not used in this article.) Dates back to at least 2003.
- Robert C. Martin. "Getting a SOLID start". objectmentor.com. Retrieved 2013-08-19.
- Sandi Metz (May 2009). "SOLID Object-Oriented Design". Retrieved 2009-01-15. Talk given at the 2009 Gotham Ruby Conference.
- "Single Responsibility Principle" (PDF). objectmentor.com. Archived from the original (PDF) on 1 June 2015.
- "Open/Closed Principle" (PDF). objectmentor.com. Archived from the original (PDF) on 5 September 2015.
- "Liskov Substitution Principle" (PDF). objectmentor.com. Archived from the original (PDF) on 5 September 2015.
- "Interface Segregation Principle" (PDF). objectmentor.com. 1996. Archived from the original (PDF) on 5 September 2015.
- Robert C. Martin (2000), "Design Principles and Design Patterns" (PDF), objectmentor.com, archived from the original (PDF) on 6 September 2015, retrieved 2009-01-14
- "Dependency Inversion Principle" (PDF). objectmentor.com. Archived from the original (PDF) on 5 September 2015.