GRASP (object-oriented design): Difference between revisions

Content deleted Content added
No edit summary
No edit summary
Line 4:
 
"The critical design tool for software development is a mind well educated in design principles. It is not the UML or any other technology" (Larman, Craig. ''Applying UML and Patterns - Third Edition''. [http://authors.phptr.com/larman/uml_ooad/index.html]). Thus, GRASP is really just a toolset, a learning aid to help in the design of object oriented software.
 
==Information Expert==
This pattern represents the basic principle of responsibility assignment. It states that responsibility should be assigned to the '''information expert'''—the class that has all the necessary information.
 
==Creator==
The '''Creator''' pattern deals with assigning the responsibility of creating new objects (instances of classes). New instances of class ''Class'' should be created by a class such that:
* it aggregates instances of ''Class'', or;
* it contains instances of ''Class'', or;
* it records instances of ''Class'', or;
* it closely uses instances of ''Class'', or;
* it has the necessary information for creating the new instance of ''Class''.
 
==Controller==
The '''Controller''' pattern assigns the responsibility of dealing with system events to a non-[[User Interface|UI]] class that represent the ovearll system or a [[use case]] scenario. A use case controller should be used to deal with ''all'' system events of a use case, and may be used for more than one use case (for instance, for use cases ''Create User'' and ''Delete User'', one can have one ''UserController'', instead of two separate use case controllers).
 
==Low Coupling==
'''Low Coupling''' is an evaluative pattern, which dictates how to assign responsibilities to support:
* low dependency between classes;
* low impact in a class of changes in other classes;
* high reuse potential.
 
==High Cohesion==
'''High Cohesion''' is also an evaluative pattern, and helps manage complexity by assigning highly related (cohesive) responsibilities to a class. Like ''Low Coupling'', ''High Cohesion'' also favors maintainabilty and reuse.
 
==Polymorphism==
According to the '''Polymorphism''' pattern, responsibility of definiing the variation of behaviors based on type is assigned to the types for which this variation happens. This is achived using [[polymorphism|polymorphic]] operations.
 
==Pure Fabrication==
A '''pure fabrication''' is a class that does not representa concept in the problem ___domain, specially made up to achive low coupling, high cohesion, and the reuse potential thereof derived (when a solution presented by the ''Information Expert'' pattern does not).
 
==Indirection==
The '''Indirection''' pattern supports low coupling (and reuse potential) between two elements by assigning the responsability of mediation between then to an intermediate object.
 
==Protected Variations==
The '''Protected Variations''' pattern protects elements from the variations on other elements (objects, systems, subsystems) by wrapping the focus of instability with an [[Interface (computer science)|interface]] and using [[polymorphism]] to create various implementations of this interface.
 
{{Soft-eng-stub}}