Principles and Tenets of Object Oriented Development
Notes from one of my favorite Robert C. Martin articles.
Reference:
http://www.objectmentor.com/resources/articles/Principles_and_Patterns.pdf
Dependency Management Principles
The Open Closed Principle
Bob Martin sites Bertrand Meyer as the originator of this idea. Basically, modules of software should be designed to be open for reuse and extension but closed for source code modification.
The Liskov Substitution Principle
Barbar Liskov introduced this principle in that subclasses should be substitutable for their base classes and not effect the user of the base class.
Bob Martin highlights the fact that violation of this principle is indeed a latent violation of the Open Closed principle.
The Dependency Inversion Principle
Uncle Bob succinctly sums up this principle. Depend upon abstractions, not upon concretions.This principle is the mechanism to achieve the Open Closed principle.
The Interface Segregation Principle
Many client specific interfaces are better than one general purpose interface. Basically do not create one uber interface for all clients needs, instead decompose them and then use multiple inheritance. This lends itself to the idea of favoring composition over pure inheritance as well.
Package Cohesion Principles
The Release Reuse Equivalence Principle
…
The Common Closure Principle
…
The Common Reuse Principle
…
The Acyclic Dependencies Principle
…
The Stable Dependencies Principle
…
The Stable Abstractions Principle
...