Design Principles Program to an interface not an implementation Favor object composition over class inheritance