Object Oriented Programming (OOP) is a model for writing computer programs. Unlike before, where programs were a list of instructions that acted on the memory in the computer, OOP focuses on objects interacting with other objects. These objects are usually instances of classes, self sustainable and are described by data fields. Many languages now utilize this model, notable examples being Python and Java.
But that's all just fancy words found on wikipedia or in some overpriced textbook, and it doesn't actually explain too well how it works. So to make it easier to understand, let's break it down.
First remember, OOP is objects interacting with each other, where these objects are instances of classes. So starting from the bottom, what is an object?
Object:
Essentially, an object consists of state, descriptors (i.e. name, colour, etc), and behaviour (i.e. walking, calling etc.) The state of an object gets stored in variables while behaviours are exposed through functions.
In terms of materialistic things, an object is like an anything we can find today, like the coffee machine in the caf. It's states/variables would be it's available flavours, while the behaviours/functions would be getting coffee or something of the like.
Class:
If objects can be seen as everyday things that we use, a class can be seen as the blueprint. These blueprints would describe the details of the coffee machine, how it delivers coffee, what flavours, soy or skim etc. All coffee machines built from this blueprint would make those coffee makers and instance of the blueprint/class.
In terms of my own preference, I have none. There's obviously going to be a strong bias to the only model you've ever used and one you've only briefly read about in a wikipedia entry.
However, I do feel that it is easier to understand code in terms of objects opposed to the previous models, working on a list of instructions and acting on memory in the computer.