APIs are written by experts for non-experts
It is the class's responsibility to enforce its class invariants
Do not allow clients to do bad things.
Hide as much of the implementation as possible.
Design for subclassing or prohibit it
Prefer classes to interfaces
APIs are by their nature paternalistic