什么是面向协议的编程?
面向协议的编程,是一种编程范式。
编程范式,是一个计算机科学用语。维基百科中的解释是,计算机编程的基本风格或典型模式。通俗来说,就是解决某一个问题的方法不同方法和思路。
像大家很熟悉的,面向对象编程以及面向过程编程,都是一种编程范式。
面向过程编程,关心的焦点是解决某一个问题需要多少步。而面向对象的编程关心的是解决问题需要多少个对象,以及这些对象之间的组织联系。
解释完了编程范式这个名字含义之后,我们继续回到正题上来。
既然面向协议编程,与面向对象,面向过程一样,是一种编程范式。那么这种编程范式相对其他其他两种范式有什么优点和优势呢。
在回答这个问题之前,我们先来回顾一下面向对象。
大家知道面向对象,相对面向过程已经是一种进步,能够让一个复杂的的工程划分为若干个小的独立的模块,减少了软件的复杂度。
这主要得益于面向对象编程里的几个核心概念,封装,继承,多态。
在面向对象的编程世界中,对象是构建程序的基本单元,
封装提供代码一个安全和便捷的访问机制
继承让子类很容易复用父类的代码
多态是对象具有更多抽象能力,写出更加通用的代码。
但是大家你在使用它们的时候,也是有成本的。主要有三个
1、implicit data sharing
2、Inheritance issues
每当你创建一个对象的时候,你第一件事就是得考虑它集成谁。并且呢,集成一般是单继承,只能有一个父类,不能有多个。而且,如果在开发中期你想改变自己的父类是一个非常难得事情。还有,父类的所有属性和方法,你都必须得都集成过来,不管你想要还是不想要,没有任何商量的余地。
3、Lost Type Relationship
虽然多态让对象具有更多抽象能力,但是我们必须得写很多类型转换代码。例如,一些基类在调用某些方法的时候,基类没有实现,子类实现了。这个时候你必须将基类转化成子类才能够调用,这造成了类型的缺失。
面向协议这个概念的提出,就是为了解决以上面向对象所遇到的问题。
我们以一个具体的例子来看一看面向协议编程是如何写的。
待写