SOLID (object-oriented design)

From Wikipedia, the free encyclopedia
  (Redirected from Solid (object-oriented design))
Jump to: navigation, search

In 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.[1][2][3] 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.[3] The SOLID acronym was introduced by Michael Feathers.

Overview[edit]

Initial Concept
S
Single responsibility principle[4]
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).
O
Open/closed principle[5]
“software entities … should be open for extension, but closed for modification.”
L
Liskov substitution principle[6]
“objects in a program should be replaceable with instances of their subtypes without altering the correctness of that program.” See also design by contract.
I
Interface segregation principle[7]
“many client-specific interfaces are better than one general-purpose interface.”[8]
D
Dependency inversion principle[9]
one should “depend upon abstractions, [not] concretions.”[8]

See also[edit]

Basic concepts and related topics[edit]

Design and development principles[edit]

References[edit]

  1. ^ “Principles Of OOD”, Robert C. Martin (“Uncle BOB”), butunclebob.com, Last verified 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.
  2. ^ “Getting a SOLID start.”, Robert C. Martin (“Uncle Bob”), objectmentor.com. Last verified 2013-08-19.
  3. ^ a b “SOLID Object-Oriented Design”, Sandi Metz (Duke University), Talk given at the 2009 Gotham Ruby Conference in May, 2009. Last verified 2009-01-15.
  4. ^ "Single Responsibility Principle" (PDF). Archived from the original (PDF) on 1 June 2015. 
  5. ^ "Open/Closed Principle" (PDF). Archived from the original (PDF) on 5 September 2015. 
  6. ^ "Liskov Substitution Principle" (PDF). Archived from the original (PDF) on 5 September 2015. 
  7. ^ "Interface Segregation Principle" (PDF). 1996. Archived from the original (PDF) on 5 September 2015. 
  8. ^ a b Robert C. Martin (“Uncle Bob”) (2000), Design Principles and Design Patterns (PDF), objectmentor.com, archived from the original (PDF) on 6 September 2015, retrieved 2009-01-14 
  9. ^ "Dependency Inversion Principle" (PDF). Archived from the original (PDF) on 5 September 2015.