【Swift】面向协议编程-理论浅析

在我的上一篇文章中,详细介绍了我的一个实践经验。当初写完之后感觉意犹未尽,总觉得缺少点什么,后来想想缺少理论知识的说明,今天就来补上这一部分的知识。

概念

面向协议编程(Protocol Oriented Programming,简称POP),是一种目前流行的编程范式,它主要通过协议来定义接口(接口可以理解为模块间通讯的口子,这就明显区别于面向对象编程范式,面向对象编程是通过继承来实现代码的可复用和可扩展的)。这种编程范式在Swift中广泛应用,通过提供一种面向协议的开发方式,使得代码具有可复用性和可扩展性。

历史过程

面向协议编程的概念在软件开发领域中已有一段时间。最早的面向协议编程概念出现于20世纪70年代的Smalltalk语言中,它提倡通过消息传递而不是继承来进行代码复用。后来,这个概念被一些其他编程语言所借鉴,并发展出了不同的编程模型和范式。在Swift语言中,面向协议编程得到了特别的重视和支持,成为了一种重要的开发模式。

与面向对象编程的区别和联系

面向协议编程是与面向对象编程相对的一种编程范式。在面向对象编程中,继承是主要的代码复用机制,通过继承一个父类来获得其属性和方法。而面向协议编程更加注重对象之间的交互和协作,通过定义和实现接口协议来实现代码复用和灵活性。这种方式可以让不同类型的对象之间互相通信和交互,更加灵活和解耦。

正如我的上文实例举例:使用面向对象编程,需要一层层地继承父类,最终得到一个得到一个拥有父类特性(接口功能)的子类。代价就是代码量超多。而使用面向协议编程。定义和实现接口协议,子类就可以自由的组合不同的协议。避免了一层层的传递,增加的代码的灵活性。

前面说了很多面向协议的好处,作者并不是说面向协议编程可以替换面向对象编程了。其实两种编程范式相辅相成、相互独立、又共存的。正如讨论架构中的设计模式一样,设计模式也是共存的。如在某个模式是MVC,而在另一个模块就是MVVM。如果一定要说出一份代码中,是使用哪种编程范式的,那就看这代码主要是以什么范式为主了。

面向协议编程的优点

首先,它强调代码的复用和灵活性,通过协议定义接口,不关心具体的实现细节,可以在不同的对象之间共享和复用代码,提高代码的可维护性和可扩展性。

其次,面向协议编程可以实现多态性,即一个对象可以遵循多个协议,使得对象能够适应不同的使用场景和需求。

此外,面向协议编程还能更好地支持单元测试,因为可以轻松地模拟对象,并进行接口测试。

在我的实际项目中,对优点1,优点2有深刻的体会。确实在代码复用和接口的灵活组合上很方便。面向协议的缺点就不说了,首先得承认每一个编程范式都有优缺点,而本文是鼓励使用面向协议编程,所以就有所取舍了。

最后补充下:本文不是系统地介绍面向协议编程的理论知识。若对此知识有兴趣,可以参考下面的链接:

https://toutiao.io/posts/t9pd6x/preview

https://www.ngui.cc/el/1347148.html?action=onClick

有兴趣,可以关注程序员华仔

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员华仔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值