Read: 08 - OO Design

SOLID: The First 5 Principles of Object Oriented Design
- S - Single-responsiblity Principle.
Class should have only one job.
- O - Open-closed Principle.
Objects or entities should be open for extension but closed for modification.
- L - Liskov Substitution Principle.
Every subclass or derived class should be substitutable for their base or parent class.
- I - Interface Segregation Principle.
A client should never be forced to implement an interface that it doesn’t use, or clients shouldn’t be forced to depend on methods they do not use.
- D - Dependency Inversion Principle
Entities must depend on abstractions, not on concretions. It states that the high-level module must not depend on the low-level module, but they should depend on abstractions.
