Object-oriented programming uses classes and objects to organize code and data. A class defines attributes like variables and methods like functions that belong to the class. An object is an instance of a class that stores the attribute values and can call the methods. Classes allow code and data to be bundled into reusable components to build robust programs with less code and faster development time compared to procedural programming.