Sunday, August 15, 2010

GRASP Patterns

GRASP Patterns

    * Information Expert - assign a responsibility to the class that has the information necessary to complete the responsibility
    * Controller - assign the responsibility for handling a system message to a class that represents the overall system or represents a use case
    * Creator - assign the responsibility to create A to B if B aggregates, contains or closely uses A
    * Low Coupling - assign a responsibility so that coupling remains low
    * High Cohesion - assign a responsibility so that cohesion remains high
    * Polymorphism - use when related behaviors vary by type
    * Indirection - assign a responsibility to an intermediate object to mediate between components
    * Pure Fabrication - assign a highly cohesive set of responsibilities to a class that does not represent a domain concept
    * Protected Variations - identify points of predicted variation and create a stable interface around them
I originally thought it was a shame that the principles of high cohesion and low coupling had to be explicitly listed as design patterns. I suppose that at some point Mr. Larman had to direct a student to apply what he had learned to the benefit of his code.

7 Wastes of Software Development

Mary and Tom Poppendieck identified these seven wastes:
    * Partially Done Work
    * Extra Features
    * Relearning
    * Handoffs
    * Delays
    * Task Switching
    * Defects
Does it all boil down to "Think Globally, Act Locally"?