Provides a way to access the elements of an aggregate object sequentially without exposing its underlying representation.
- A class should only have one reason to change.
- A measure of how closely a class or module supports a single purpose or responsibility. A module or cass that has high cohesion when designed around a set of related functions, and low cohesion when designed around a set of unrelated functions.