Object Oriented Programming
A programming technique often mis-spelled as “Object Orientated” programming.
It is when you consider things as “Objects” and pass around objects - so most things have less dependency (decoupling) and one idea or one class of ideas is treated separately. It allows you to specify a class with data(or attributes), and methods to manipulate the class or the data. A class may purely be data, or it may reference an interface to a hardware device.
Because there is some amount of access control - some things may be hidden. This can be very useful if you want to create something as a library - so when its internals change - the interfaces to it can remain the same, without breaking anything.
One thing I particularly like about the concept is that it allows for modular programming. Modular techniques are preferred because it promotes re-use, and means you do not have to re-invent the wheel. Lego is a great example of a modular system.