Software entities like classes, modules
and functions should be open for
extension but closed for modifications
Liskov's Substitution Principle(LSP)
We must make sure that the new derived
classes just extend without replacing the
functionality of old classes. Derived types
must be completely substitutable for their
base types.
Interface Segregation Principle (ISP)
Clients should not be forced to depend
upon interfaces that they don't use.
Dependency Inversion Principle (DIP)
- High-level modules should not depend on low-level
modules. Both should depend on abstractions.
- Abstractions should not depend on details. Details
should depend on abstractions.