In this chapter
The traditional way of thinking about objects, encapsulation, and inheritance is very limiting. Encapsulation exists for so much more than simply hiding data. By expanding the definition to include any kind of hiding, I can use encapsulation to create layers between objectsenabling me to change things on one side of a layer without adversely affecting the other side.
Inheritance is better used as a method of consistently dealing with different concrete classes that are conceptually the same rather than as a means of specialization.
The concept of using objects to hold variations in behavior is not unlike the practice of using data members to hold variations in data. Both allow for the encapsulation (and therefore extension) of the data/behavior being contained.