Software engineer and instructor Robert C. Martin[2][3][1] introduced the basic principles of SOLID design in his 2000 paper Design Principles and Design Patterns about software rot.[3][4]: 2–3 The SOLID acronym was coined around 2004 by Michael Feathers.[5]
Principles
Single responsibility principle
The single-responsibility principle (SRP) states that "there should never be more than one reason for a class to change."[6] In other words, every class should have only one responsibility.[7]
Importance
Maintainability: When classes have a single, well-defined responsibility, they're easier to understand and modify.
Testability: It's easier to write unit tests for classes with a single focus.
Flexibility: Changes to one responsibility don't affect unrelated parts of the system.[7]
Open–closed principle
The open–closed principle (OCP) states that "software entities ... should be open for extension, but closed for modification."[8]
Importance
Extensibility: New features can be added without modifying existing code.
Stability: Reduces the risk of introducing bugs when making changes.
Flexibility: Adapts to changing requirements more easily.
Liskov substitution principle
The Liskov substitution principle (LSP) states that "functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it."[9]See also design by contract.[9]
Importance
Polymorphism: Enables the use of polymorphic behavior, making code more flexible and reusable.
Reliability: Ensures that subclasses adhere to the contract defined by the superclass.
Predictability: Guarantees that replacing a superclass object with a subclass object won't break the program.[9]
^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.
^ abMartin, 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.