Object-oriented programming (OOP) is a new programming paradigm that views computation as objects interacting by sending messages to one another. Key elements of OOP include objects performing computation by making requests of each other through message passing, with every object having its own memory consisting of other objects. Classes group similar objects and define their common behaviors. Classes are organized into an inheritance hierarchy to allow subclasses to inherit and override behaviors. OOP aims to help programmers cope with complexity by providing abstraction and modularity.