从面向对象到函数式编程

从面向对象到函数式编程

本章介绍如何使用设计模式来写具有健壮性、可维护性、可扩展性的代码,以及Java的最新特性。为此,我们需要讨论以下问题:[插图]

什么是编程范式[插图]

命令式范式[插图]

声明式和函数式范式[插图]

面向对象范式[插图]

统一建模语言(UML)

综述[插图]

面向对象原则

1.2 Java编程范式

什么是编程范式,自从有软件开发开始,开发人员尝试了不同的方式来设计编程语言。对于不同的编程语言,我们都有一系列的概念、原则和规定。这些概念、原则和规定就被称为编程范式。从理论上来说,我们希望编程语言只遵从一个编程范式。但是实际上,一个语言往往拥有多个编程范式。在接下来的几节里,我们会重点介绍Java语言所基于的编程范式,包括命令式、面向对象、声明式和函数式编程,以及用来描述这些编程范式的主要概念。

1.2.1 命令式编程

命令式编程是这样一种编程范式:用语句更改程序的状态。这个概念出现在运算的开始,并且与计算机的内部结构紧密相连。程序是处理单元上运行的一组指令,它以命令的方式改变状态(状态即存储器中的变量)。“命令”这个名称,顾名思义,指令的执行即是程序的运行。今天大多数流行的编程语言或多或少都基于命令式编程发展而来。命令式语言最典型的示例就是C语言。

命令式编程示例为了更好地理解命令式编程范式的概念,让我们举一个例子:你计划在某城镇与一个朋友会面,但他不知道如何到达那里。我们来试着以“命令式”的方式向他解释如何实现目标:1)在中央火车站乘坐1号电车;2)在第三站下车;3)向右走,朝第六大道行进,直到到达第三个路口。

 

1.2.2 面向对象编程

面向对象编程经常与命令式编程联系在一起,在实践当中,两者是可以共存的。Java就是这种协作的生动证明。接下来,我们将简要介绍面向对象的基本概念,代码都会以Java语言实现。

 

1.2.3 声明式编程

让我们回想之前提到的现实生活中的命令式编程例子,我们指导朋友如何到达一个地方。当我们从声明式编程范式的角度思考,我们并不告诉朋友如何到达特定位置,而是简单地给他地址并让他弄清楚如何到达那里。在这种情况下,我们并不关心他是否使用地图或GPS,或者他是否向别人求助,而是告诉他该做什么:上午9:30到达第五大道和第九大道之间的交界处。与命令式编程相反,声明式编程是这样一种编程范式:它指定程序应该做什么,而不具体说明怎么做。纯粹的声明式语言包括数据库查询语言(如SQL和XPath)以及正则表达式。与命令式编程语言相比,声明式编程语言更抽象。它们并不模拟硬件结构,因此不会改变程序的状态,而是将它们转换为新状态,并且更接近数学逻辑。通常,非命令式的编程范式都被认为属于声明式类别。这就是为什么有许多类型的范式属于声明式类别。在我们的探索中,我们会看到与本书内容唯一相关的一个声明式编程范式:函数式编程。

 

1.2.4 函数式编程

函数式编程是声明式编程的子范式。与命令式编程相反,函数式编程不会改变程序的内部状态。在命令式编程中,函数更多地被视为指令、例程或过程的序列。它们不仅依赖于存储在存储器中的状态,而且还可以改变该状态。这样,根据当前程序的状态,使用相同参数调用命令式函数可能会产生不同的结果,与此同时,被执行的函数更改了程序的变量。在函数式编程术语中,函数类似于数学函数,函数的输出仅依赖于其参数,而不管程序的状态如何,完全不受函数是何时执行的影响。矛盾的是,虽然命令式编程自计算机发明以来就存在,但函数式编程的基本概念却可以追溯到这之前。大多数函数式语言都是基于lambda演算,这是由数学家Alonzo Church于20世纪30年代创建的一种形式化数学逻辑系统。函数式语言在当时变得如此受欢迎的原因之一是它们可以轻松地在并行环境中运行,这与多线程不太一样。函数式语言支持并行运行的关键在于它们的基本原理:函数仅依赖于输入参数而不依赖于程序的状态。也就是说,它们可以在任何地方运行,然后将多个并行执行的结果连接起来并进一步使用。

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值