Object-oriented programming uses objects that contain data fields and methods to design applications. Key concepts include abstraction, encapsulation, inheritance, and polymorphism. A class defines shared attributes and behaviors that enable instances of that class to maintain state and behavior. An object is a runtime instance of a class that represents some entity like a person or place. Data encapsulation wraps data and code together, controlling access through public, private, and protected keywords. Inheritance allows classes to inherit attributes and behaviors from other classes in a hierarchy.