My Blogs
Posts tagged with "面型对象编程"
编程范式
Published 2021年12月10日 12:10 by james
TL;DR
- 结构化编程是对程序控制权的直接转移的限制。
- 面向对象编程是对程序控制权的间接转移的限制。
- 函数式编程是对程序中赋值操作的限制。
一句话总结
- 结构化编程对程序控制权的直接转移进行了限制和规范。
- 面向对象编程对程序控制权的间接转移进行了限制和规范。
- 函数式编程对程序中的赋值进行了限制和规范。
如你所见,我在介绍三个编程范式的时候,有意采用了上面这种格式,目的是凸显每个编程范式的实际含义——它们都从某一方面限制和规范了程序员的能力。没有一个范式是增加新能力的。也就是说,每个编程范式的目的都是设置限制。这些范式主要是为了告诉我们不能做什么,而不是可以做什么。
另外,我们应该认识到,这三个编程范式分别限制了goto语句、函数指针和赋值语句的使用。那么除此之外,还有什么可以去除的吗? 没有了。因此这三个编程范式可能是仅有的三个了——如果单论去除能力的编程范式的话。支撑这一结论的另外一个证据是,三个编程范式都是在1958年到1968年这10年间被提出来的,后续再也没有新的编程范式出现过。
编程范式与软件架构的关系
大家可能会问,这些编程范式的历史知识与软件架构有关系吗? 当然有,而且关系相当密切。譬如说:
- 多态是我们跨越架构边界的手段,
- 函数式编程是我们规范和限制数据存放位置与访问权限的手段,
- 结构化编程则是各模块的算法实现基础。
这和软件架构的三大关注重点不谋而合: 功能性、组件独立性以及数据管理。
函数式编程模式
Published 2021年11月08日 11:11 by james
模式词汇表1
替代面向对象模式
这一部分会向你展示如何采用函数式语言的特性来替代普通的面向对象模式。这样做通常可以减少我们需要编写的代码数量,从而让我们维护的代码变得更加简洁。
模式1 替代函数式接口
在这一模式中,我们采用原生的函数式特性来替代像Runnable
或Comparator
这样常见的函数式接口。
在这一部分中,我们引入了两个基本的函数式特性。
- 第一个特性是高阶函数(higher-order function
),它允许我们将函数作为头等数据进行传递。
- 第二个特性是匿名函数,它允许我们编写快捷的一次性函数,而无需为其指定函数名。
通过将这两个特性相结合,我们可以用一种非常简洁的方式来替代大多数的函数式接口实例。
模式2 替代承载状态的函数式接口
我们采用这种模式来替代那些需要承载某些状态信息的函数式接口实例,为此我们引入了一个新的特性: 闭包。闭包可以将某个函数和某些状态进行打包传递。
模式3 替代命令模式
替代命令模式将行为封装于某个对象之中。
在这一模式中,我们将了解如何使用在前两种模式中所介绍的技术来替代面向对象版本的命令模式。 …