In the ring today we have Interface Oriented Programming (IOP) vs Object Oriented Programming (OOP).
What’s the difference?
TL;DR: In my opinion there is no difference. IOP is merely clarifies OOP, a reminder to program to interfaces, not implementations.
Object oriented programming has always been about interfaces. That’s the whole idea. You take a cluster of data, encapsulate it, infuse it with behavior, and it’s ready to interact with other objects as long as they respect the interface’s contract. But a problem arises when developers pierce the veil of the object’s interface and start coding to its implementation. This is Bad. It leads to tight coupling between objects and increases complexity. It doesn’t allow you to refactor with confidence. Now you have to hunt for all of the code you’ll have to change every time you change some facet of an object’s implementation. And it’s not a treasure hunt; it feels more like a manhunt - in Afghanistan. It’s what Martin Fowler refers to as “inappropriate intimacy.” That’s a good name for it. So keep your objects out of the tabloids. Respect the interface.