GRASP, General Responsibility Assignment Software Patterns, is a learning aid for assigning responsibilities to objects. I was introduced to these patterns while reading Craig Larman's Applying UML and Patterns - An Introduction to Object-Oriented Analysis and Design and Iterative Development.
There are 9 GRASP Patterns and I have written about most of them:
- Information Expert ( Part I and Part II ) - A general principal of object design and responsibility assignment?
- Creator - Who creates?
- Controller - What first object beyond the UI layer receives and coordinates a system operation?
- Low Coupling - How to reduce the impact of change?
- High Cohesion - How to keep objects focused, understandable, and manageable?
- Polymorphism - Who is responsible when behavior varies by type?
- Pure Fabrication - Who is responsible when you are desperate, and do not want to violate high cohesion and low coupling?
- Indirection - How to assign responsibilities to avoid direct coupling?
- Protected Variations - How to assign responsibilities so that the variations or instability in the elements do not have an undesirable impact on other elements?
I have also written a few articles about how the GRASP Patterns relate to a few popular software applications like DotNetNuke, Community Server, and Enterprise Library: