OOP (Object Oriented Programming) is a programming model that organizes programs around data or objects. There are four main concepts in OOP: encapsulation, inheritance, polymorphism, and abstraction. Encapsulation combines data and functions into a single unit called a class. Inheritance allows classes to inherit properties from parent classes. Polymorphism allows one interface to be used for multiple forms. Abstraction hides internal implementation details and only shows necessary functions to the user. These concepts help with code reuse, reducing duplication, and increasing modularity.