Coupling and Cohesion

Two words are key to understanding dependency. These terms have actually
been used by the software engineering community by several years,
and predate the common use of object-oriented languages.
These terms are coupling and cohesion.

Coupling refers to the extent to which one component uses another to
perform actions. Generally a goal is to reduce coupling as much as possible.

Cohesion refers to the extent to which the actions of a component seem to
be tied together in purpose. Generally a goal is to increase cohesion within
a software component.