SOLID
Jump to navigation
Jump to search
SOLID |
---|
Principles |
In object-oriented computer programming, 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 American software engineer and instructor Robert C. Martin,[1][2][3] first introduced in his 2000 paper Design Principles and Design Patterns.[2][4]
The SOLID concepts are:
- 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." See also design by contract.[7]
- The Interface segregation principle: "many client-specific interfaces are better than one general-purpose interface."[8][4]
- The Dependency inversion principle: "depend upon abstractions, [not] concretions."[9][4]
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]
See also[edit]
- Code reuse
- Inheritance (object-oriented programming)
- Package principles
- Don't repeat yourself (DRY)
- GRASP (object-oriented design)
- KISS principle
- You aren't gonna need it (YAGNI)
References[edit]
- ^ Robert C. Martin. "Principles Of OOD". butunclebob.com. Retrieved 2014-07-17.. (Note the reference to "the first five principles", although the acronym is not used in this article.) Dates back to at least 2003.
- ^ a b Robert C. Martin. "Getting a SOLID start". objectmentor.com. Retrieved 2013-08-19.
- ^ a b Sandi Metz (May 2009). "SOLID Object-Oriented Design". Retrieved 2019-08-13. Talk given at the 2009 Gotham Ruby Conference.
- ^ a b c Martin, Robert C. (2000). "Design Principles and Design Patterns" (PDF). Archived from the original (PDF) on 2015-09-06.
- ^ "Single Responsibility Principle" (PDF). objectmentor.com. Archived from the original (PDF) on 2 February 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.
- ^ "Dependency Inversion Principle" (PDF). objectmentor.com. Archived from the original (PDF) on 5 September 2015.
- ^ Martin, Robert (2018). Clean Architecture: A Craftsman's Guide to Software Structure and Design. p. 58. ISBN 9780134494166.