[swift-users] Comparing POP to OOP

Jon Hoffman hoffman.jon at gmail.com
Sun Mar 6 18:32:19 CST 2016


> On Mar 6, 2016, at 1:12 AM, Dave Abrahams via swift-users <swift-users at swift.org> wrote:
> 
> 
> on Sat Mar 05 2016, Jon Hoffman <swift-users-AT-swift.org> wrote:
> 
>>> On Feb 25, 2016, at 7:35 PM, Dave Abrahams via swift-users <swift-users at swift.org> wrote:
>>> 
>>> 
>>> on Sun Feb 14 2016, zhaoxin肇鑫 <swift-users-AT-swift.org> wrote:
>>> 
>> 
>>>> I have not read your blog. But in my opinion, what Apple called protocol
>>>> programming is actually so called functional programming. It is not object
>>>> programming at all. It uses protocols and structs to avoid object
>>>> programming.
>>> 
>>> I don't think most functional programmers would recognize
>>> protocol-oriented programming as what they do.  It is true that one of
>>> the main benefits we see in protocol-oriented programming is that it
>>> allows one to use *mutable* value types, instead of classes, in
>>> polymorphic contexts.  Functional programming is largely concerned with
>>> immutable data, where the distinction between value and reference
>>> semantics disappears, and it doesn't matter if you're using classes or
>>> not.  But the main thing in FP is the use of higher-order functions,
>>> which Swift enthusiastically supports, but have nothing whatever to do
>>> with protocol-oriented programming.
>> 
>> Your e-mail touches on one of the things that excites me the most
>> about Swift.  As you say “But the main thing in FP is the use of
>> higher-order functions, which Swift enthusiastically supports, but
>> have nothing whatever to do with protocol-oriented programming”.
>> Swift isn’t just a Protocol-Oriented programming language or an
>> Object-Oriented language or a functional programming language it is
>> actually all of them and more.  While other languages attempt to
>> support different paradigms, in my opinion, Swift is one of the few
>> language that actually does a good job at supporting multiple
>> paradigms.
>> 
>> In the conclusion section of my post, I mention that while I pointed
>> out a lot of ways that I believe POP is superior to OOP I would not
>> say that POP is a clear winner over OOP.  
> 
> It would be interesting to see where you think OOP has a distinct
> advantage due to fundamental properties of the paradigms (rather
> than artifacts of an immature implementation of protocol language
> features)

I would not say that OOP has a distinct advantage over POP based on the fundamental properties of the paradigms.  However, if I were pressed I would say that OOP does have an advantage over POP in the area of data structures because of POP emphasis on value types over reference types.  For example we cannot create a linked list with a value type.  If we tried we would get a compile time error that says:  “Recursive value type ‘Type’ is not allowed. 

There are two arguments that I could make off the top of my head against my last statement.  The first argument would be:  Is preferring value types to reference types actually part of OOP.  I will address this in my next e-mail where you ask me what I mean by my statement that POP is about so much more than the protocol.  The second argument would be that we are not limited to value types with POP and we are able to still use reference types. 

While it is true that we are still able to use value types with POP however if we take Apple’s recommendation and use value types for our custom types we really should try our best to avoid reference types.  It could get confusing if some of our types are reference types and some are value types especially for larger enterprise type projects.  Luckily in XCode with have the quick documentation where we can hold down the option key and click on the type in question to tell us if it is a value or reference type however we do not have that option outside of the Apple’s ecosystem like when we are developing Linux applications with Swift.  Therefore we need to be careful on how and when to use reference and value types. 

Where I really think OOP has a very distinct advantage of POP is that it has been around for so long, has been vetted in more projects then either of us can count and it is very well documented.  I don’t know if anyone can really say that Apple has documented what POP is and isn’t very well which is the reason I wrote my book on POP and why I plan on writing additional posts on it as well. 

If you do a search on the Internet for Protocol-Oriented programming you get a number of different views on what it is and what it isn’t.  Most of the articles, in my opinion, take a very narrow view of POP and try to fit it into the OOP model but with an Interface first approach which, once again in my opinion, misses the larger view.  Once again I will explain this more in my next e-mail where I address your question about what I mean when I say that POP is about so much more than the protocol.

Jon

> 
>> The winner is actually the programmer because we are not limited to
>> one programming paradigm.  We can choose the paradigm that fits our
>> needs.  Personally I have use POP in a number of projects and I
>> definitely prefer it to OOP or FP but I would not criticize anyone
>> that uses the other two because they are very valid paradigms that
>> have proven over time.
> 
> -- 
> -Dave
> 
> _______________________________________________
> swift-users mailing list
> swift-users at swift.org
> https://lists.swift.org/mailman/listinfo/swift-users

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-users/attachments/20160306/6aeade70/attachment.html>


More information about the swift-users mailing list