Encapsulation – each object is self-contained unit that includes data and methods that access data
Object reuse – designers often reuse same classes for windows components
Information hiding – data associated with object is not visible to outside world
Protection from variations – parts of a system that are unlikely to change are segregated from those that will
Indirection – an intermediate class is placed between two classes to decouple them but still link them