Object Oriented Programming (OOP) involves modeling real-world objects like bank accounts as classes with data and behaviors. This is more effective than procedural programming which focuses on shared data and procedures. In OOP, classes define common properties and each object is an instance of a class. Inheritance allows subclasses to inherit attributes and behaviors from parent classes. Encapsulation protects data within classes through public and private access. Polymorphism allows one interface with multiple implementations through inheritance and method overloading.