SOLID
Appearance
SOLID |
---|
Principles |
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.[1]
Principles
[edit]- Single-responsibility principle: "There should never be more than one reason for a class to change."[2] In other words, every class should have only one responsibility.[3]
- Open–closed principle: "Software entities ... should be open for extension, but closed for modification."[4]
- Liskov substitution principle: "Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it."[5] See also design by contract.[5]
- Interface segregation principle: "Clients should not be forced to depend upon interfaces that they do not use."[6][7]
- Dependency inversion principle: "Depend upon abstractions, [not] concretes."[8][7]
Origin
[edit]Software engineer and instructor, Robert C. Martin,[9][10][1] introduced the collection of principles in his 2000 paper Design Principles and Design Patterns about software rot.[10][7]: 2–3 The SOLID acronym was coined around 2004 by Michael Feathers.[11]
See also
[edit]- Code reuse
- GRASP (object-oriented design)
- Inheritance (object-oriented programming)
- List of software development philosophies
References
[edit]- ^ a b Metz, Sandi (May 2009). "SOLID Object-Oriented Design". YouTube. Archived from the original on 2021-12-21. Retrieved 2019-08-13. Talk given at the 2009 Gotham Ruby Conference.
- ^ "Single Responsibility Principle" (PDF). objectmentor.com. Archived from the original on 2 February 2015.
{{cite web}}
: CS1 maint: unfit URL (link) - ^ Martin, Robert C. (2003). Agile Software Development, Principles, Patterns, and Practices. Prentice Hall. p. 95. ISBN 978-0135974445.
- ^ "Open/Closed Principle" (PDF). objectmentor.com. Archived from the original on 5 September 2015.
{{cite web}}
: CS1 maint: unfit URL (link) - ^ a b "Liskov Substitution Principle" (PDF). objectmentor.com. Archived from the original on 5 September 2015.
{{cite web}}
: CS1 maint: unfit URL (link) - ^ "Interface Segregation Principle" (PDF). objectmentor.com. 1996. Archived from the original on 5 September 2015.
{{cite web}}
: CS1 maint: unfit URL (link) - ^ a b c Martin, Robert C. (2000). "Design Principles and Design Patterns" (PDF). objectmentor.com. Archived from the original on 2015-09-06.
{{cite web}}
: CS1 maint: unfit URL (link) - ^ "Dependency Inversion Principle" (PDF). objectmentor.com. Archived from the original on 5 September 2015.
{{cite web}}
: CS1 maint: unfit URL (link) - ^ Martin, Robert C. "Principles Of OOD". ButUncleBob.com. Archived from the original on Sep 10, 2014. 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 Martin, Robert C. (13 Feb 2009). "Getting a SOLID start". Uncle Bob Consulting LLC (Google Sites). Archived from the original on Sep 17, 2013. Retrieved 2013-08-19.
- ^ Martin, Robert (2018). Clean Architecture: A Craftsman's Guide to Software Structure and Design. Prentice Hall. p. 58. ISBN 9780134494166.