A programming paradigm that organizes code by collecting logic and data together into units called classes. The four basic concepts of object oriented programming are inheritance, abstraction, polymorphism, and encapsulation.
SOLID design principles
- Single responsibility - high cohesion
- Open/closed - open for extension but closed for modification
- Liskov substitution - if S is a subtype of T, a object of type T may be substituted with any object of subtype S
- Interface segregation - many client-specific interfaces are better than one general-purpose interface
- Dependency inversion - depend upon abstractions; not concretions