Object-oriented programming uses classes and objects to represent abstract data types that encapsulate both data and behavior through methods and messages. Classes can inherit attributes and behaviors from other classes through inheritance, allowing for polymorphism where subclasses can override or extend the functionality of parent classes through message passing.