Depend on abstractions, not on concretions.
The SOLID principle
Single responsibility principle
Open/closed principle
Liskov's substitution principle
Interface segregation principle