The Program to an Interface principle states that you program to an interface, not to an implementation. Depend on abstractions, not concrete classes, for flexibility.