Single Responsibility

The single responsibility principal states that a class should only have a single responsibility.

Open / Close Principle

Classes should be open for extension and closed to modification ...

Liskov Substitution

Liskov substitution principle ... you should be able to use a parent class whererever a child class is being used.

Interface Segregation

The interface segragation principal states interfaces should be small and not force implementation classes to implement methods that they do not need.

Dependency Inversion

The dependency inversion principal states our code should depend on interfaces and not on concrete implementations