Programming that organises code into objects which combine data with the behaviour that operates on it.