Design maxims

From CSSEMediaWiki
(Difference between revisions)
Jump to: navigation, search
(Maxims: add law of leaky abstractions)
m (Reverted edits by Ebybymic (Talk); changed back to last version by LukeRobinson)
 
(21 intermediate revisions by 8 users not shown)
Line 1: Line 1:
== Object oriented design maxims ==
+
== Object Oriented Design Maxims ==
  
 
  maxim:: (noun) A general truth or rule of conduct expressed in a sentence.
 
  maxim:: (noun) A general truth or rule of conduct expressed in a sentence.
  
Lets use the term ''maxim'' to mean all the rules, laws, guidelines, principles, heuristics, strategies, patterns and idioms that are named by a standard phrase.
+
Let's use the term ''maxim'' to mean all the rules, laws, guidelines, principles, heuristics, strategies, patterns and idioms that are named by a standard phrase.
 +
 
 +
[[Maxim Hierarchy]] - An attempt at creating a hierarchy of maxims can be found here.
  
 
=== Maxims ===
 
=== Maxims ===
Line 18: Line 20:
 
* [[Common reuse principle]]
 
* [[Common reuse principle]]
 
* [[Coupling and cohesion]]
 
* [[Coupling and cohesion]]
 +
* [[Dependency injection]]
 
* [[Dependency inversion principle]]
 
* [[Dependency inversion principle]]
 
* [[Design by contract]]
 
* [[Design by contract]]
Line 27: Line 30:
 
* [[Encapsulation is hierarchical]]
 
* [[Encapsulation is hierarchical]]
 
* [[Encapsulation boundary]]
 
* [[Encapsulation boundary]]
 +
* [[Establishing priorities]]
 
* [[Fat interfaces]]
 
* [[Fat interfaces]]
 
* [[Favor composition over inheritance]]
 
* [[Favor composition over inheritance]]
Line 34: Line 38:
 
* [[Impedance mismatch]]
 
* [[Impedance mismatch]]
 
* [[Information hiding]]
 
* [[Information hiding]]
 +
* [[Intelligent children pattern]]
 
* [[Interface segregation principle]]
 
* [[Interface segregation principle]]
 
* [[Keep accessors and mutators separate]]
 
* [[Keep accessors and mutators separate]]
Line 44: Line 49:
 
* [[No concrete base classes]]
 
* [[No concrete base classes]]
 
* [[No silver bullet]]
 
* [[No silver bullet]]
 +
* [[Once and only once]]
 
* [[One responsibility rule]]
 
* [[One responsibility rule]]
 
* [[Open closed principle]]
 
* [[Open closed principle]]
* [[Once and only once]]
+
* [[Option-operand separation]]
 
* [[Premature optimization]]
 
* [[Premature optimization]]
 
* [[Program to the interface not the implementation]]
 
* [[Program to the interface not the implementation]]
Line 60: Line 66:
 
* [[You ain't gonna need it]]
 
* [[You ain't gonna need it]]
  
'''Clumps of maxims'''
+
==Clumps of Maxims==
 +
These are groups of Maxims, usually gathered by the developer(s) who proposed them.
 +
 
 +
===COSC 427's:===
 +
* [[Make constructors blocking]]
 +
* [[No Peter Pan objects]]
 +
* [[Avoid mixing inputs and outputs]]
  
 
=== [[Johnson and Foote's heuristics]]:===
 
=== [[Johnson and Foote's heuristics]]:===
** [[Recursion introduction]]
+
* [[Recursion introduction]]
** [[Eliminate case analysis]]
+
* [[Eliminate case analysis]]
** [[Reduce the number of arguments]]
+
* [[Reduce the number of arguments]]
** [[Reduce the size of methods]]
+
* [[Reduce the size of methods]]
** [[Class hierarchies should be deep and narrow]]
+
* [[Class hierarchies should be deep and narrow]]
** [[The top of the class hierarchy should be abstract]]
+
* [[The top of the class hierarchy should be abstract]]
** [[Minimize accesses to variables]]
+
* [[Minimize accesses to variables]]
** [[Subclasses should be specializations]]
+
* [[Subclasses should be specializations]]
** [[Split large classes]]
+
* [[Split large classes]]
** [[Factor implementation differences into subcomponents]]
+
* [[Factor implementation differences into subcomponents]]
** [[Separate methods that do not communicate]]
+
* [[Separate methods that do not communicate]]
** [[Send messages to components instead of to self]]
+
* [[Send messages to components instead of to self]]
** [[Reduce implicit parameter passing]]
+
* [[Reduce implicit parameter passing]]
===[[Riel's heuristics]]===
+
 
 +
===[[Riel's heuristics]]:===
 +
* All of Riel's heuristics can be found [[Riel's heuristics|here]].
 +
 
 
===[[Bob Martin's principles]]:===
 
===[[Bob Martin's principles]]:===
** (SRP) The [[Single responsibility principle]]
+
* (SRP) The [[Single responsibility principle]]
** (OCP) The [[Open/closed principle]]
+
* (OCP) The [[Open/closed principle]]
** (LSP) The [[Liskov substitution principle]]
+
* (LSP) The [[Liskov substitution principle]]
** (DIP) The [[Dependency inversion principle]]
+
* (DIP) The [[Dependency inversion principle]]
** (ISP) The [[Interface segregation principle]]
+
* (ISP) The [[Interface segregation principle]]
** (REP) The [[Reuse release equivalence principle]]
+
* (REP) The [[Reuse release equivalence principle]]
** (CCP) The [[Common closure principle]]
+
* (CCP) The [[Common closure principle]]
** (CRP) The [[Common reuse principle]]
+
* (CRP) The [[Common reuse principle]]
** (ADP) The [[Acyclic dependencies principle]]
+
* (ADP) The [[Acyclic dependencies principle]]
** (SDP) The [[Stable dependencies principle]]
+
* (SDP) The [[Stable dependencies principle]]
** (SAP) The [[Stable abstractions principle]]
+
* (SAP) The [[Stable abstractions principle]]
 +
 
 
===[[Ken Auer 1995]]:===
 
===[[Ken Auer 1995]]:===
** [[Define classes by behavior, not state pattern]]  
+
* [[Define classes by behavior, not state pattern]]  
** [[Implement behavior with abstract state pattern]]  
+
* [[Implement behavior with abstract state pattern]]  
** [[Identify message layers pattern]]  
+
* [[Identify message layers pattern]]  
** [[Defer identification of state variables pattern]]  
+
* [[Defer identification of state variables pattern]]  
** [[Encapsulate concrete state pattern]]  
+
* [[Encapsulate concrete state pattern]]  
** [[Use lazy initialization pattern]]  
+
* [[Use lazy initialization pattern]]  
** [[Define default values via explicit protocol pattern]]
+
* [[Define default values via explicit protocol pattern]]
* Alan Davis 1995:
+
 
===[[Code smells]]:===
+
===[[Alan Davis 1995]]:===
** [[Duplicate code smell]]
+
To be completed...
** [[Long method smell]]
+
 
** [[Large class smell]]
+
===[[William Brown 1998]]:===
** [[Long parameter list smell]]
+
* [[Managing functionality]]
** [[Divergent change smell]]
+
* [[Managing performance]]
** [[Shotgun surgery smell]]
+
* [[Managing complexity]]
** [[Feature envy smell]]
+
* [[Managing change]]
** [[Data clumps smell]]
+
* [[Managing IT resources]]
** [[Switch statement smell]]
+
* [[Managing technology transfer]]
** [[Parallel inheritance hierarchies smell]]
+
 
** [[Data class smell]]
+
===[[Joshua Bloch]]:===
** [[Message chain smell]]
+
* [[Joshua Bloch 2006 Bumper Sticker API Design | Bumper Sticker API Design]]
 +
 
 +
== See Also ==
 +
* [[Code smells]]
 +
* [[Patterns]]
 +
* [http://programmer.97things.oreilly.com/wiki/index.php/Edited_Contributions Edited Contributions] - A whole heap of maxims and ideas...

Latest revision as of 03:08, 25 November 2010

Contents

Object Oriented Design Maxims

maxim:: (noun) A general truth or rule of conduct expressed in a sentence.

Let's use the term maxim to mean all the rules, laws, guidelines, principles, heuristics, strategies, patterns and idioms that are named by a standard phrase.

Maxim Hierarchy - An attempt at creating a hierarchy of maxims can be found here.

Maxims

Clumps of Maxims

These are groups of Maxims, usually gathered by the developer(s) who proposed them.

COSC 427's:

Johnson and Foote's heuristics:

Riel's heuristics:

  • All of Riel's heuristics can be found here.

Bob Martin's principles:

Ken Auer 1995:

Alan Davis 1995:

To be completed...

William Brown 1998:

Joshua Bloch:

See Also

Personal tools