A methodology that enables a system to be modeled as a set of objects that can be controlled and manipulated in a modular manner

An approach used to model concepts into code. Concepts are represented as Objects that know their own attributes and behaviors. Objects collaborate with other Objects by the caller asking the recipient (via a message) to perform one of the recipient's behaviors.

This is in contrast to the alternative of writing procedural code that acts on data, where concepts are typically modeled using a structured approach.

Object orientation improves the modeling of complex concepts and relationships by providing a single representation (an Object) of a concept, whereas alternatives require at least two: an abstraction of the thing being acted on, and a separate abstraction of the action being performed on the first.