Object oriented programming (OOP) is a programming model that organizes software around objects and classes rather than functions and logic. There are four main concepts in OOP: encapsulation, modularity, polymorphism, and inheritance. Encapsulation bundles data and methods into a single unit, modularity splits programs into independent and interchangeable modules, polymorphism allows objects to take on multiple forms, and inheritance allows classes to derive properties from parent classes. The shift from procedural to OOP allowed for more reusable, flexible, and maintainable code.