Example
A high-level class defines an interface and the low-level classes implement the interface, providing specific functionality.

Description
Software components should rely on abstract interfaces rather than concrete implementations.
This principle acts as a key mechanism for achieving flexible and robust object-oriented architectures by ensuring that high-level modules, which contain business logic and policies, are not directly dependent on low-level modules with specific implementations.
By depending on abstractions, the code is less susceptible to changes and can be more easily extended or modified without altering the existing high-level modules.
