在本书的第三章中提到了一个对于我们来说其实很重要的概念:编程范式,其主要包括:结构化编程,面向对象编程和函数式编程。相对于其他比较宽泛的概念,编程范式其实是我们看待程序的观点,代表了程序设计者认为程序应该如何被构建和执行的看法
结构化编程定义与背景结构化编程,也称为模块化编程,是20世纪60年代末期为了对抗软件危机而提出的一种编程范式。它鼓励程序员使用分而治之的方法,将复杂的程序分解成可管理的小块,每块完成一个具体的任务。关键概念* 模块化: 将程序分解成独立的单元或模块,每个模块实现特定的功能。* 序列结构: 程序按顺序执行代码块。* 选择结构: 使用条件语句决定执行哪个代码块,例如if, else, switch。* 迭代结构: 通过循环重复执行代码块,例如for, while, do-while。
优点:* 可读性强: 通过将问题分解成小的部分来解决,代码更易于理解。* 易于维护: 模块化的代码更容易修改和扩展。* 降低复杂性: 简单的控制结构降低了代码逻辑的复杂性。缺点:* 功能限制: 对于非常复杂或需要高度抽象的系统,结构化编程可能不够用。* 缺乏重用性: 代码重用性不如面向对象编程。面向对象编程(OOP)定义与背景面向对象编程是一种编程范式,它使用“对象”来模拟现实世界中的事物和事物间的交互。对象具有状态(属性)和行为(方法),并且能够模拟真实世界的复杂性。关键概念* 封装: 隐藏对象的内部状态和实现细节,只通过接口与外界交互。* 继承: 允许新创建的类继承现有类的属性和方法。* 多态: 允许不同的对象对同一消息做出不同的响应。
优点:* 代码可重用性: 通过继承机制,可以很容易地复用和扩展现有的代码。* 可扩展性: 新的功能可以通过添加新的对象和类来实现,不必修改现有的代码。* 可维护性: 对象的封装提供了代码的安全性和隐藏性,便于管理和修改。缺点:* 性能问题: 对象创建、继承和多态等都可能带来时间和空间上的开销。* 复杂性: 设计一个良好的面向对象系统需要深刻的设计思考,系统可能会变得复杂。函数式编程(FP)定义与背景函数式编程是一种把计算看作是数学函数的应用,强调无副作用的纯函数。这种范式的根源可以追溯到数学函数,特别是λ演算。关键概念* 不可变性: 数据对象在创建后其状态就不能改变。* 纯函数: 函数的输出值只依赖于输入的参数,不依赖任何外部状态。* 高阶函数: 函数可以接受其他函数作为参数,也可以返回一个函数。
优点:* 可预测性强: 纯函数使得代码易于推理和测试。* 并行编程: 不可变数据和无副作用的特性使得函数式编程非常适合并行处理。* 模块化: 高阶函数和纯函数促进了代码的模块化。缺点:* 资源消耗: 特别是在处理大数据或复杂递归时,函数式编程可能导致内存和性能问题。* 学习曲线: 对于习惯于命令式和面向对象编程的开发者来说,函数式编程的概念可能难以掌握。
结构化编程定义与背景结构化编程,也称为模块化编程,是20世纪60年代末期为了对抗软件危机而提出的一种编程范式。它鼓励程序员使用分而治之的方法,将复杂的程序分解成可管理的小块,每块完成一个具体的任务。关键概念* 模块化: 将程序分解成独立的单元或模块,每个模块实现特定的功能。* 序列结构: 程序按顺序执行代码块。* 选择结构: 使用条件语句决定执行哪个代码块,例如if, else, switch。* 迭代结构: 通过循环重复执行代码块,例如for, while, do-while。
优点:* 可读性强: 通过将问题分解成小的部分来解决,代码更易于理解。* 易于维护: 模块化的代码更容易修改和扩展。* 降低复杂性: 简单的控制结构降低了代码逻辑的复杂性。缺点:* 功能限制: 对于非常复杂或需要高度抽象的系统,结构化编程可能不够用。* 缺乏重用性: 代码重用性不如面向对象编程。面向对象编程(OOP)定义与背景面向对象编程是一种编程范式,它使用“对象”来模拟现实世界中的事物和事物间的交互。对象具有状态(属性)和行为(方法),并且能够模拟真实世界的复杂性。关键概念* 封装: 隐藏对象的内部状态和实现细节,只通过接口与外界交互。* 继承: 允许新创建的类继承现有类的属性和方法。* 多态: 允许不同的对象对同一消息做出不同的响应。
优点:* 代码可重用性: 通过继承机制,可以很容易地复用和扩展现有的代码。* 可扩展性: 新的功能可以通过添加新的对象和类来实现,不必修改现有的代码。* 可维护性: 对象的封装提供了代码的安全性和隐藏性,便于管理和修改。缺点:* 性能问题: 对象创建、继承和多态等都可能带来时间和空间上的开销。* 复杂性: 设计一个良好的面向对象系统需要深刻的设计思考,系统可能会变得复杂。函数式编程(FP)定义与背景函数式编程是一种把计算看作是数学函数的应用,强调无副作用的纯函数。这种范式的根源可以追溯到数学函数,特别是λ演算。关键概念* 不可变性: 数据对象在创建后其状态就不能改变。* 纯函数: 函数的输出值只依赖于输入的参数,不依赖任何外部状态。* 高阶函数: 函数可以接受其他函数作为参数,也可以返回一个函数。
优点:* 可预测性强: 纯函数使得代码易于推理和测试。* 并行编程: 不可变数据和无副作用的特性使得函数式编程非常适合并行处理。* 模块化: 高阶函数和纯函数促进了代码的模块化。缺点:* 资源消耗: 特别是在处理大数据或复杂递归时,函数式编程可能导致内存和性能问题。* 学习曲线: 对于习惯于命令式和面向对象编程的开发者来说,函数式编程的概念可能难以掌握。