Object-oriented programming uses objects and classes to organize code and data. The key principles are encapsulation, inheritance, abstraction, and polymorphism. Encapsulation hides unnecessary details within classes and provides a clear interface. Inheritance allows classes to inherit and extend functionality from parent classes. Abstraction deals with objects based on important characteristics while ignoring details. Polymorphism allows working with different objects in the same way by defining abstract behavior implementations.