Which SOLID principle helps the use to develop less coupled code by ensuring the high level modules depend on abstraction rather than concrete implementations of lower level modules?
a. Dependency Inversion Principle
b. Interface segregation
c. Open Closed Principle
d. Single responsibility