当前位置: 首页 > 科技观察

面向过程、面向对象和面向协议编程分析

时间:2023-03-20 17:37:31 科技观察

面向过程编程面向过程编程是一种以过程为中心的编程方法。具体来说,一个系统或业务是按照从开始到结束的步骤,以功能的形式实现的。面向流程主要是分析系统或业务需要的步骤,关注系统或业务的哪些步骤处理好。这种编程方式比较典型,最具代表性的是C语言。面向对象编程面向过程编程是一种以对象为中心的编程方法。全称是ObjectOrientedProgramming。简称OOP,其核心思想是“一切皆对象”,一切从对象的角度出发,设计开发系统,用对象来管理系统。这种思维方式符合人的思维方式,也很容易被人理解。面向对象主要是将系统或业务拆解成各种对象;重点是系统或业务中的哪些对象处理得好。它最初的编程语言是Smalltalk(Smalltalk是所有OOP语言的鼻祖),后来就是大名鼎鼎的C++语言。当然,Java语言是将OOP思想发挥到极致,让大多数人耳熟能详的语言。ProtocolOrientedProgrammingProtocolOrientedProgramming,全称ProtocolOrientedProgramming,简称POP,是Apple在WWDC2015上提出的一种编程范式,现已成为Swift的基础库。在讲面向协议之前,先介绍一下协议的概念。关于协议的概念,苹果官网是这样定义的:“协议为适合特定任务或功能的方法、属性和其他要求定义了一个蓝图。然后,类、结构或枚举可以遵循提供这些要求的协议。协议的实际实现。满足协议要求的任何类型都被认为符合该协议。”请参阅Swift编程语言(Swift4.0.3)部分。这个比较难理解。根据我个人的经验,我是从几个方面来理解的:Protocol就是协议,类似于Java语言中的Interface(接口),用于模块之间的通信。但它与界面并不完全相似。该协议在Object-C中被广泛使用,一般与委托(delegation)结合,实现一个VC向另一个VC传递数据或响应事件。这种情况下的协议很像一个接口,一个定义良好的规范。与继承的关系,在Objective-C和Swift语言中,我们知道不支持多继承,但是可以通过协议实现多继承。协议和多态与多态无关,但Swift4.0.3之后的协议扩展(Protocolextension)可以实现多态功能。一般来说,协议是接口、继承和多态的综合概念。如果一定要给出一个概念,协议更像是定义了一套规范,让类、结构、枚举都遵循规范。面向协议的编程呢?首先是面向协议的开发语言,目前只有Swift是该语言,不支持Object-C、Java等其他语言。面向协议的编程实际上是使用Swift语言开发的。协议的思想如何在Swift中体现?不使用协议思想的方式(也就是通常的方式):我们先创建一个ViewController,生成一个实例vc,这个vc最终会AddSubView到父类中。然后在ViewCongroller上添加自己的视图,比如UIView、UILabel或者UIButton等等。这些控件将生成相应的对象。然后每个接口都由这些对象管理。还有一种是没有接口的,我们先一个一个创建类。比如在学校管理系统中,建立Teacher和Student等类,然后在业务层创建Teacher和Student对应的实例。通过操作实例来实现业务逻辑。总之,先创建类,然后生成对应的实例,使用实例来管理业务。这就是OOP的实现方式。如果用协议思想来做,那么首先不是建立一个个的类,而是建立一整套协议(或规范)。比如上面例子中的老师和学生,就可以建立性别(Sex)、语言(language)、人(person)等协议(norms)。这些协议规范中定义了属性和方法。定义完成后,就可以按照协议的多重继承对原来的Teacher类进行标准化。例如,定义一个继承Sex、language和person协议的Teacher类。这样也可以实现Teacher类的功能。当然,在实例化中,Set有男有女,language有语文、数学、英语之类的。至于person,就是个人的基本属性(如姓名、地址、联系方式)。这样生成的Teacher实例可以匹配很多不同的Teacher实例。比如一个教英语的女老师,一个教体育的男老师。本质上定义了一套规范(协议),比如性别、语言、人等等。这些规范可以是最小的原子,比如Sex,就一个属性(sex,1表示男性,0:表示女性)。定义了这组通用规范后,类、结构或枚举等类型就可以遵循了。这与以前的面向对象方法完全不同。它的好处:1.协议可以任意扩展,不影响现有系统。2.协议可以重复使用。更好地利用现有资源。