**SINGLE RESPONSIBILITY PRINCIPLE*

A class should have only one reason to change. This means a class should have only one responsibility or functionality.

**OPEN CLOSED PRINCIPLE

A class should be open for extension but closed for modification. This means you should be able to add new functionality without modifying existing code.

**LISKOV SUBSTITUTION PRINCIPLE

Objects of a superclass should be replaceable with objects of a subclass without altering the correctness of the program.

_**INTERFACE SEGREGATION PRINCIPLE

A class should not be forced to implement interfaces it doesn’t use. Large interfaces should be split into smaller, more specific interfaces.

**DEPENDENCY INVERSION PRINCIPLE

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.