OOP

SOLID

Single responsibility

Do one thing, and do it well


Open/closed

Classes should be open for extension but closed for modification


Liskov’s Substitution

Children should not violate the contracts of parents.

If you change a class with one of its children, the program should still work correctly.

Inheritance should pass the ‘Is-A’ test.


Interface Segregation

Many specific interfaces are better than one general interface


Dependency Inversion

Provide dependencies from outside because it makes testing easier, and modularity