The C++ Programming Language Bjarne Stroustrup, 3rd edition
Chapter 1 - Notes to the reader
When you program, you create a concrete representation of the ideas in your solution to some problem. Let the structure of the program reflect those ideas as directly as possible:
- If you can think of "it" as a separate idea, make it a class.
- If you can think of "it" as a separate entity, make it an object of some class.
- If two classes have a common interface, make that interface an abstract class.