DIP:The Dependency-Inversion Principle
a.High-level modules should not depend on low-level modules.Both should depend on abstractions.
b.Abstractions should not depend on details.Detils should depend on abstractions.
b.Abstractions should not depend on details.Detils should depend on abstractions.