What is the dependency inversion principle and why is it important?
Basically it says:
Class should depend on abstractions (e.g interface, abstract classes), not specific details (implementations).