Heuristic 2.1. All data should be hidden within its class.
Heuristic 2.2. Users of a class must be dependent on its public interface, but a class should not be dependent on its users.
Heuristic 2.3. Minimize the number of messages in the protocol of a class.
Heuristic 2.4. Implement a minimal public interface that all classes understand [e.g., operations such as copy (deep versus shallow), equality testing, pretty printing, parsing from an ASCII description, etc.].
Heuristic 2.5. Do not put implementation details such as common-code private functions into the public interface of a class.
Heuristic 2.6. Do not clutter the public interface ...