Swift Protocol – Is There Such a Thing as Protocol Oriented Programming?

object-orientedprotocolsolidswift-language

I am copy/pasting my comment from this article sumarizing a post on reddit:

I really don't think "Protocol Orientation" is something new… You've
got protocols in Obj-C, you've got Interfaces in Java, Abstract
Classes in C++, etc.

You can segregate interfaces and avoid inheritance by replacing it
with composition in any OO language…

Please help me understand what makes Protocol Orientation different or
new. It seems to be more of a buzz-word coined by Apple to maybe push
developers into being aware and respecting SOLID principles in their
apps… By no means a bad thing, but also not something new.

What is Protocol Oriented Programming?

Is it a new programming paradigm that has the potential to be as revolutionary as structured programming and abolish the dangerous "goto" of OOP?

Or just a way of enforcing good, solid respecting design into OOP code bases?

And since nothing is ever a silver bullet, what are the pitfalls of POP?

Best Answer

Apple Inc. calls interfaces "protocols." When they say "protocol oriented" they mean programming using interfaces instead of inheritance.

From here: http://www.tutorialspoint.com/objective_c/objective_c_protocols.htm

Objective-C allows you to define protocols, which declare the methods expected to be used for a particular situation. Protocols are implemented in the classes conforming to the protocol.

From Objective-C Succintly:

In Objective-C, a protocol is a group of methods that can be implemented by any class. Protocols are essentially the same as interfaces in C#, and they both have similar goals. They can be used as a pseudo-data type, which is useful for making sure that a dynamically-typed object can respond to a certain set of messages. And, because any class can “adopt” a protocol, they can be used to represent a shared API between completely unrelated classes.

From Objective-C for Absolute Beginners:

Apple defines a protocol simply as a list of methods declarations, unattached to a class definition. The methods listed for protocols are suppose to be implemented by you.

So, protocol oriented programming is what Objective-C and Swift programmers call what the rest of us call favoring implementing interfaces over extending classes (inheritance).

Is it a new programming paradigm that has the potential to be as revolutionary as structured programming and abolish the dangerous "goto" of OOP?

No. It's nothing new, just a different name used in the Apple developer community. Composition over inheritance has tremendous advantages though that have been discussed extensively in this forum.

And since nothing is ever a silver bullet, what are the pitfalls of POP?

At first none came to my mind, but I just found this in a forum in CodeRanch, postes by user Jim Yingst:

One disadvantage of interfaces is that one you publish them to other coders outside your own control, they represent a public commitment which can be difficult to change later. You don't know who else is using the interface and you don't know how, so you can't just add a new method to the interface without risking breaking the code of existing clients (if/when they upgrade). In comparison, if you'd used an abstract or concrete class, you could just add a new concrete method with no problems (usually).

It's possible to work around this by creating a new interface with extends or supplements the original one, and changing your concrete implementations to implement the new interface, instead of or in addition to the old one. That way you don't break existing client code. It's generally more work than adding a method to a class would be, but it's possible.

This disadvantage isn't a reason to abandon interfaces, but it is a reason to design your interfaces carefully, and think carefully before you publish a new interface in a new release. Spending some extra time designing things well now can save you many headaches later.

Related Topic