Designing good classes
----------------------
* To guide design on the class level, ask: "How will this class be used?"

* A class should represent one coherent abstraction or concept.

* Look for code reuse opportunities (would this class be useful elsewhere?)

* When working with a class externally, you should not have to understand the internal implementation.

* Every constructor and public method should leave the instance variables in a consistent and correct state for the next public method call.

* Generally avoid going over 7 (plus or minus 2) instance variables in a class.

* Do not repeat data unless truly necessary.

* Do not give variables more scope than they require.
