<div dir="ltr">Thank you for the feedback however you cannot design the code as you describe, if I understand your explanation correctly, because one of the requirements is the animals may be apart of multiple categories.  As the example in the post shows the alligator belongs to both the Land and the Sea categories.  In you description that would mean that the Alligator type would need to be a subclass of both the Land and Sea superclasses which is not permitted.  Remember that one of the drawbacks with OOP is a subclass can only inherit from one superclass.<div><br></div><div>Jon</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Feb 15, 2016 at 1:17 PM, Daniel Tartaglia <span dir="ltr">&lt;<a href="mailto:danielt1263@gmail.com" target="_blank">danielt1263@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><div>(Reposting because I forgot to change the subject line. Hope that this is the correct thing to do.)</div><div><br></div>I have to say John that I am not a fan of your OOP code. I would have written the OOP code very much like you wrote the POP version using the Strategy pattern.<br><div><div style="word-wrap:break-word"><div><br></div><div><div><font face="Monaco">[Animal]&lt;*&gt;---&gt;[Mode]</font></div><div><font face="Monaco">                  ^</font></div><div><font face="Monaco">                  |</font></div><div><font face="Monaco">           +------+------+</font></div><div><font face="Monaco">           |      |      |</font></div><div><font face="Monaco">        [Land]  [Sea]  [Air]</font></div><div>     </div></div><div><br></div><div>(View the above with a mono-spaced font.)</div><div><br></div><div>In essence, I see no difference. There may be a difference, but I don’t think your example presents one.</div><div><br><div><blockquote type="cite"><div>On Feb 15, 2016, at 1:00 PM, <a href="mailto:swift-users-request@swift.org" target="_blank">swift-users-request@swift.org</a> wrote:</div><br><div><div>Date: Sun, 14 Feb 2016 18:59:05 -0500<br>From: Jon Hoffman &lt;<a href="mailto:hoffman.jon@gmail.com" target="_blank">hoffman.jon@gmail.com</a>&gt;<br>To: swift-users &lt;<a href="mailto:swift-users@swift.org" target="_blank">swift-users@swift.org</a>&gt;<br>Subject: [swift-users] Comparing POP to OOP<br>Message-ID: &lt;<a href="mailto:5DA5F8F5-D645-4BF9-A0CE-1AF1DB8B3735@gmail.com" target="_blank">5DA5F8F5-D645-4BF9-A0CE-1AF1DB8B3735@gmail.com</a>&gt;<br>Content-Type: text/plain; charset=&quot;utf-8&quot;<br><br>Numerous tutorials that I have seen take a very Object-Oriented approach to the protocol-oriented programming (POP) paradigm.  By this statement I mean that they tell us that with POP we should begin our design with the protocol rather than with the superclass as we did with OOP however the protocol design tends to mirror the superclass design of OOP.   They also tell us that we should use extensions to add common functionality to types that conform to a protocol as we did with superclasses in OOP.  While protocols and protocol extensions are arguably two of the most important concepts of POP these tutorials seem to be missing some other very important concepts.  <br><br>In this post I would like to compare Protocol-Oriented design to Object-Oriented design to highlight some of the conceptual differences.  You can view the blog post here:  <a href="http://masteringswift.blogspot.com/2016/02/pop-and-oop.html" target="_blank">http://masteringswift.blogspot.com/2016/02/pop-and-oop.html</a> &lt;<a href="http://masteringswift.blogspot.com/2016/02/pop-and-oop.html" target="_blank">http://masteringswift.blogspot.com/2016/02/pop-and-oop.html</a>&gt;<br><br>Jon<br></div></div></blockquote></div><br></div></div></div><br></div></blockquote></div><br></div>