A programming discipline in which operations are carried out by sending general requests (called messages) to objects, which are responsible for executing the appropriate detailed procedures (called methods) to implement the messages.