Dividing software so different responsibilities remain distinct.

Representation of dependency relationships among components.

Pattern providing sequential collection traversal.

Principle that a component should have one primary responsibility.

Recorded sequence of active function calls.

Pattern centralizing communication among objects.

Software entities should allow extension without unnecessary modification.

Report showing the call sequence at a point in execution.

Pattern capturing object state for later restoration.

Subtypes should be usable wherever their base types are expected.