Object-oriented programming (OOP) models real-world objects like their attributes and behaviors, grouping similar objects into classes. The four main principles of OOP are encapsulation, abstraction, inheritance and polymorphism. OOP aims to reuse code through classes, make debugging and testing easier, and better model real-world problems compared to structured/functional programming.