Guidelines for Allocating
Responsibilities to Classes
1.  System intelligence should be evenly distributed.
2.  Each responsibility should be stated as generally as
possible.
3.  Information and the behavior that is related to it
should reside within the same class.
4.  Information about one thing should be localized with a
single class, not distributed across multiple classes.
5.  Responsibilities should be shared among related
classes, when appropriate.