Tha famous OOP. This paradigm is a refinement of previous ideas like ADT
s (Abstract Data Type). The idea is that everything it's an object, so the state of any given program can be partitioned into finite objects, and each object would have methods which would be responsible for dealing with that data. This enables code reuse
by forcing the programmer to define clean interfaces among the different objects. This is called encapsulation
New objects can be defined as variations of existing ones. This is called inheritance. For instance, you have the object class Person that has certain data and a certain behaviour, you can define a Woman as a kind of Person, and use a Woman in each part the program expects a Person. This leads us to the thirs important quality of OOP: polymorphism: a given part of the program doesn't have to know the inner details of an object to deal with it. And it can deal with many different object as long as they define the same interface to the outside world.
You can use this paradigm with many languages, but some of them are specifically designed to use it, like: