Principles Of Object Oriented Design
http://c2.com/cgi/wiki?PrinciplesOfObjectOrientedDesign
There are five principles of class design.
(SRP) The SingleResponsibilityPrinciple
(OCP) The OpenClosedPrinciple
(LSP) The LiskovSubstitutionPrinciple
(DIP) The DependencyInversionPrinciple
(ISP) The InterfaceSegregationPrinciple
There are three principles of package cohesion
(REP) The ReuseReleaseEquivalencePrinciple
(CCP) The CommonClosurePrinciple
(CRP) The CommonReusePrinciple
There are three principles of package coupling
(ADP) The AcyclicDependenciesPrinciple
(SDP) The StableDependenciesPrinciple
(SAP) The StableAbstractionsPrinciple