Coupling and cohesion are distinctly different concepts but often confused. Coupling is the degree of dependency between an application’s modules or components, i.e., the strength of the relationships between the different parts. By contrast, cohesion is defined as the measure of the intra-dependency that exists between the elements of an individual module or component.
I discussed the basics of coupling and cohesion in an earlier article here. In this article we’ll explore coupling in more detail — including afferent (incoming) and efferent (outgoing) coupling, and how they impact software quality.