- Program to an interface, not an implementation - Inheritence breaks encapsulation - interface -> implementation dependency -> difficul to reuse - Favor object composition over class Inheritence - composition -> reusable components