Object-oriented programming uses objects that communicate through messages. Objects send messages by invoking operations on target objects, and the number and kind of messages depends on the object's interface. Abstraction is used to manage complexity by capturing only relevant details about an object from a given perspective.