summaryrefslogtreecommitdiffstats
path: root/content/posts/面向对象编程与面向过程编程的本质区别.md
diff options
context:
space:
mode:
authoryingyu5658 <i@yingyu5658.me>2025-12-13 08:33:08 +0800
committeryingyu5658 <i@yingyu5658.me>2025-12-13 08:33:08 +0800
commit1e5f8eb33bc41cb59faf059e83701152785cabea (patch)
tree45867273ac2178285be840764f7962d2b55556c6 /content/posts/面向对象编程与面向过程编程的本质区别.md
downloadblog-1e5f8eb33bc41cb59faf059e83701152785cabea.tar.gz
blog-1e5f8eb33bc41cb59faf059e83701152785cabea.zip
Initial commit
Diffstat (limited to 'content/posts/面向对象编程与面向过程编程的本质区别.md')
-rw-r--r--content/posts/面向对象编程与面向过程编程的本质区别.md28
1 files changed, 28 insertions, 0 deletions
diff --git a/content/posts/面向对象编程与面向过程编程的本质区别.md b/content/posts/面向对象编程与面向过程编程的本质区别.md
new file mode 100644
index 0000000..ba09188
--- /dev/null
+++ b/content/posts/面向对象编程与面向过程编程的本质区别.md
@@ -0,0 +1,28 @@
+---
+abbrlink: 1518948190
+categories:
+- 往昔
+date: "2025-05-29 21:21:36"
+tags:
+- 编程
+title: 面向对象与面向过程的本质区别
+---
+面向对象与面向过程这两种编程思想主要体现在一件事上:面向对象关心**谁来做**,而面向过程关心**做什么**。
+
+举个例子,如果我现在要开发一个五子棋小游戏,在面向对象的思想中,实现步骤应该是这样的。
+- 有一个窗口对象,可以让我的游戏内容展示在里面
+- 创建棋盘对象
+- 初始化棋盘
+- 创建计分板对象
+- 初始化计分板
+- 玩家开始下棋,棋盘对象创建棋子对象,绘制出来
+
+不难看出,面向对象就是在关心**谁来做**,先关心哪个对象去做,再去研究这个对象要去**怎么做**。抽象层级更高,但是符合人类的思维。从代码结构上来看,写面向对象更偏向在画一个树状图,一级一级划分谁要做什么事情,而面向过程更像一个线性的流程图,全程都在关心需要做什么事情。
+
+更官方地说,面向对象以算法和流程为核心,强调步骤拆解。而面向对象以与对象交互为核心,强调责任分配
+
+当然,写法在语言上就有所限定。C更适合面向过程,头文件的引用使用函数做事就意味着C很难实现面向对象的设计模式,当然有一些比较邪门的技巧,容易开枪把自己脚指头崩掉,比如`void*`模拟泛型这种不在本文讨论范围。
+
+C缺乏类、继承等基础语法支持,但可以用结构体加函数指针简单模拟对象,但设计难度有所增加,调试难度更有所增加。面向过程更适合处理逻辑简单的任务或算法密集型任务,而面向对象更适合构建GUI应用等复杂系统。
+
+面向对象并非在所有情况下都是最优选择。还是需要依据开发项目的实际需求考量。