-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
58 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
--- | ||
title: 《架构整洁之道》读书笔记 - 编程范式篇 | ||
date: "2024-11-11" | ||
image: | ||
headerImage: false | ||
tag: | ||
- | ||
star: true | ||
category: blog | ||
author: Ai.Haibara | ||
excerpt: | ||
theme: fancy | ||
--- | ||
|
||
## 概述 | ||
|
||
最近阅读了 Robert C. Martin 的《架构整洁之道》中关于编程范式的章节。这部分主要介绍了三种主要的编程范式:结构化编程、面向对象编程和函数式编程。每种范式都通过某种方式对程序控制权或数据进行了限制。 | ||
|
||
### 结构化编程 | ||
|
||
由 Dijkstra 在 1968 年提出 | ||
核心思想:限制直接转移控制权 | ||
引入了模块化和测试的概念 | ||
去除了无限制的 GOTO 语句,引入了 if/then/else 和 do/while/until 等结构 | ||
主要贡献:让程序可以被分解为可证明的单元 | ||
|
||
### 面向对象编程 | ||
|
||
核心特性:封装、继承和多态 | ||
最重要的是多态,它为插件架构提供了基础 | ||
通过多态实现了依赖反转 | ||
允许控制源代码依赖关系的方向 | ||
帮助解决跨模块和跨架构的依赖管理问题 | ||
|
||
### 函数式编程 | ||
|
||
基于 λ 演算 | ||
核心思想:不可变性 | ||
所有变量都是不可变的 | ||
没有赋值语句 | ||
通过管理状态的可变性来控制程序的复杂度 | ||
|
||
### 个人思考 | ||
|
||
这三种范式各自解决了不同的问题: | ||
|
||
- 结构化编程解决了直接转移控制权的问题 | ||
- 面向对象编程解决了间接转移控制权的问题 | ||
- 函数式编程解决了变量赋值的问题 | ||
|
||
在实际开发中,这些范式常常是混合使用的。理解它们的本质和限制,有助于我们在架构设计时做出更好的决策。 | ||
|
||
### 实践启示 | ||
|
||
在设计架构时,要充分利用多态来管理依赖关系 | ||
尽可能使用不可变数据,减少状态管理的复杂度 | ||
合理划分模块,保证每个组件都是可测试的 | ||
在适当的场景选择合适的范式 |