Low Coupling (GRASP)

GRASP Pattern: Low Coupling

 * Name | **Low Coupling** |
 * Problem | How to reduce the impact of change? |
 * Solution | Assign responsibilities so that (unnecessary) coupling remains low. Use this principle to evaluate alternatives. |

A //coupling// is a measure of how strongly one element is connected to, has knowledge of, or depends on other elements. If there's coupling or dependency, then when the dependent-upon element changes, the dependant may be affected. E.g. a subclass is strongly coupled to a superclass.

The Low Coupling principle applies to many dimensions of software development. It's really one of the cardinal goals in building software.

Use this principle to //evaluate// existing designs or to evaluate the choice between new alternatives. Prefer a design whose coupling is lower than the alternatives.

By adhere to the principle of Low Coupling, we reduce the time, effort, and defects in modifying software. This has big implications in building and maintaining software.

Information Expert guides us to support Low Coupling. Expert asks us to find the object that has most of the information required for the responsibility (e.g. Board) and assign responsibility there.

If we put the responsibility anywhere else, the overall coupling will be higher because more information or objects must be shared away from their original source.