Reasons:
Degree in which parts of the code are dependent on each other. Low coupling means independent modules/functios etc. Helps in making the parts more reusable. Easier to update. There is always going to be coupling as parts make use of each other. The point is to be aware and decide where and how to create the coupling. To keep (some) control over maintainability of the software. Its a strategic effort to choose where you want to have what type of coupling.
- strong type of coupling, try to avoid! - content coupling is when a function updates something directly which is passed in as an argument. (modifies something / state of something outside of its own scope) - problem is that coupling occurs on low level implementation between classes, so the acting function or class needs to know/depends on the internal implementation of the other class.
Can be avoided somewhat by creating functions (setters getters) so that the internal parameters are "encapsulated".
- When modules interact with each other and methods share data through parameters. Is a “good” type of coupling as it is a low level data.
principle of least knowledge, units should only talk or interact with closely related units.
Assign a function to the class that can perform it best (as in has the data to be able to do it).
- General Responsibility Assignment Software Patterns (GRASP)