美文网首页
Swift 面向对象、面向函数、面向协议编程

Swift 面向对象、面向函数、面向协议编程

作者: sampson666888 | 来源:发表于2021-10-27 12:50 被阅读0次

一、面向对象编程 OOP(object-oriented programming):

在面向对象编程世界里,一切皆为对象,它的核心思想是继承、封装、多态。

二、面向函数编程

Swift 支持 map, reduce, filter, flatmap 这类去除中间状态、数学函数式的方法,更加强调运算结果而不是中间过程,所以我们也说Swift是面向函数编程。

三、面向协议编程 POP(protocol-oriented programming):

面向协议编程则主要通过协议,又叫做接口。面向协议也有继承封装多态,只不过这些不是针对对象建立的。

OC和Swift的面向协议的区别

OC无法做到面向协议开发,而Swift可以,因为Swift可以做到协议方法的具体实现,而OC不行。面向协议开发的核心是:模块化(组件化)。

注意:swift可以做到协议方法的具体实现。也就是说,声明协议方法之后,扩展extension该协议,然后实现该协议方法。让类遵守该代理,然后这个类就可以直接调用协议的方法了。

注意两点:

  • protocol中可以声明变量,方便在协议方法中使用。
  • 协议方法的具体实现需要在extension中来实现。
为什么Swift演变成了一门面向协议的编程语言。这是因为面向对象存在以下几个问题:
  • 动态派发的安全性(这应该是OC的困境,在Swift中Xcode是不可能让这种问题编译通过的)
  • 横切关注点(Cross-Cutting Concerns)问题。面向对象无法描述两个不同事物具有某个相同特性这一点。
  • 菱形问题(比如C++中)。C++可以多继承,在多继承中,两个父类实现了相同的方法,子类无法确定继承哪个父类的此方法,由于多继承的拓扑结构是一个菱形,所以这个问题有被叫做菱形缺陷(Diamond Problem)。
为什么要使用POP编程?

Swift已经是一门面向对象的语言,类已经满足我们的所有需求,功能也很强大,为什么还要使用POP呢?
在Swift中,值类型优先于类。然而,面向对象不能很好地与结构体和枚举一起工作:因为结构体和枚举不能被继承。因此,作为面向对象的一大特征——继承,就不能应用于值类型了。

面向协议编程(POP)的好处有什么呢?
  • 结构体、枚举等值类型也可以使用。
  • 可以继承多个协议,弥补Swift中类单继承的不足。
  • 增强代码的可扩展性,减少代码的冗余。
  • 让项目更加组件化,代码可读性更高。
  • 让功能代码组成一个功能块,更便于单元测试。
协议继承

协议可以从其它协议继承,然后在它继承的需求之上添加功能,因此可以提供更细粒度和更加灵活的设计。

协议的组合

类、结构体和枚举可以符合多个协议,他们可以采用多个协议的默认实现。是不是和多继承很类似?这种组合方式不仅比将所有需要的功能压缩到一个基类中更灵活,而且也适用于值类型。

相关文章

  • Swift和OC的区别

    一、编程范式 Swift可以面向协议编程、面向函数编程、面向对象编程。 OC主要是面向对象编程。 二、类型安全 S...

  • swift注意事项

    一、编程范式 Swift 可以面向协议编程(POP)、函数式编程、面向对象编程。 Object-C 以面向对象编程...

  • swift和OC的比较

    swift ----OC比较 编程范式 Swift 可以面向协议编程、函数式编程、面向对象编程。Objective...

  • Swift和OC的主要区别

    编程范式 Swift 可以面向协议编程、函数式编程、面向对象编程。 Object-C 以面向对象编程为主,当然你可...

  • Swift学习笔记1-oc与swift的区别

    编程范式Swift可以面向协议编程、函数式编程、面向对象编程OC以面向对象编程为主,当然你可以引入类似Reacti...

  • Swift和OC的区别

    一.编程范式 1.Swift可以面向协议编程,函数式编程,面向对象编程; 2.OC以面向对象编程为主,当然也可以引...

  • Swift从入门到精通-1

    一、Swift和Objective-C比较 1、编程范式:Swift可以面向协议编程,函数式编程,面向对象编程;O...

  • Swift 基本语法(一)— 值类型

    Swift 与 OC 语言的区别 1.Swift 面对协议编程、 面向函数编程、面向对象编程。 函数成了一等公民...

  • Swift特性

    Swift是面向对象还是函数式的编程语言 Swift 既是面向对象的,又是函数式的编程语言。说 Swift 是面向...

  • Swift 和 Objective-C的区别

    swift是静态语言 oc是动态语言 swift是面向协议编程 oc是面向对象编程 纯swift的函数派发方式是直...

网友评论

      本文标题:Swift 面向对象、面向函数、面向协议编程

      本文链接:https://www.haomeiwen.com/subject/wzoualtx.html