Objects : Things with responsibility. (interfaces)
Encapsulation : Can hiding everything. (not just data)
Variation : Find it and hide it. (hide behaviors as object , let it handle the variation , which we don't need to know)
Program to an interface, not an implementation.
Favor object (aggregation) over class inheritance.
Instead considering what might force a change to your design, consider what you want to be able to change without redesign.