高级语言:面向过程和面向对象

用一个简单的比喻来帮助你理解:“如何完成一顿饭?”
1. 面向过程 (Procedural Oriented)
核心思想:关注“步骤”和“流程”。
这就像你拿到一份菜谱。你必须严格按照步骤来执行:

第一步:洗菜。

第二步:切菜(把土豆切成丝)。

第三步:开火、倒油。

第四步:放花椒、炒香。

第五步:放入土豆丝、翻炒...

...

最后一步:装盘。

特点:

以“函数”为中心: 整个程序就是由一个个的“函数”(function)组成的,就像菜谱里的一个个“步骤”。

数据和操作分离: “土豆”(数据)和“切菜”这个动作(函数)是分开的。你得自己调用 qieCai(tudou) (切菜) 这个函数,作用于“土豆”这个数据上。

思维方式: “我该如何一步一步地解决这个问题?”

C语言就是典型的面向过程语言。你定义各种变量(数据),然后编写各种函数来处理这些变量。程序的执行就是函数A调用函数B,函数B再调用函数C...

2. 面向对象 (Object Oriented)

核心思想:关注“谁”来做“什么事”。

这就像你开了一家餐厅。你不需要关心做饭的每一步,你只需要“指挥”不同的对象来完成他们的工作。

厨房里有:

一个“厨师”对象

一个“切菜工”对象

一个“服务员”对象

当一个“顾客”对象(他有“点菜”的方法)点了一份土豆丝时:

你(经理)对“服务员”对象说:fuwuyuan.jiedan(tudousi) (服务员去接单)。

“服务员”对象对“厨师”对象说:chushi.zuocai(tudousi) (厨师去做菜)。

“厨师”对象发现需要切菜,于是对“切菜工”对象说:qiecaigong.qiecai(tudou) (切菜工去切菜)。

特点:

以“对象”为中心: 整个程序是由一个个“对象”(object)组成的。

数据和操作绑定(封装): “厨师”这个对象,他自己拥有“厨艺”这个技能(方法/函数),也拥有“厨师等级”这个信息(数据/属性)。它们被“封装”在一起。你不需要知道厨师的刀法细节,你只需要告诉他“去做菜”,他自己就知道该怎么做。

思维方式: “我需要哪些对象?每个对象有什么功能和信息?它们之间如何协作?”

C++ 和 Java 就是典型的面向对象语言。你不再是写一步步的指令,而是先去“设计”和“定义”这些“对象”(在代码里叫 类 (Class)),比如设计一个 ChuShi (厨师) 类,定义他有什么属性(如:name, level)和什么方法(如:zuoFai(), yanfaXinCai())。
这是一个非常核心且重要的问题!

用一个简单的比喻来帮助你理解:“如何完成一顿饭?”

  1. 面向过程 (Procedural Oriented)
    核心思想:关注“步骤”和“流程”。

这就像你拿到一份菜谱。你必须严格按照步骤来执行:

第一步:洗菜。

第二步:切菜(把土豆切成丝)。

第三步:开火、倒油。

第四步:放花椒、炒香。

第五步:放入土豆丝、翻炒...

...

最后一步:装盘。

特点:

以“函数”为中心: 整个程序就是由一个个的“函数”(function)组成的,就像菜谱里的一个个“步骤”。

数据和操作分离: “土豆”(数据)和“切菜”这个动作(函数)是分开的。你得自己调用 qieCai(tudou) (切菜) 这个函数,作用于“土豆”这个数据上。

思维方式: “我该如何一步一步地解决这个问题?”

C语言就是典型的面向过程语言。你定义各种变量(数据),然后编写各种函数来处理这些变量。程序的执行就是函数A调用函数B,函数B再调用函数C...

  1. 面向对象 (Object Oriented)
    核心思想:关注“谁”来做“什么事”。

这就像你开了一家餐厅。你不需要关心做饭的每一步,你只需要“指挥”不同的对象来完成他们的工作。

厨房里有:

一个“厨师”对象

一个“切菜工”对象

一个“服务员”对象

当一个“顾客”对象(他有“点菜”的方法)点了一份土豆丝时:

你(经理)对“服务员”对象说:fuwuyuan.jiedan(tudousi) (服务员去接单)。

“服务员”对象对“厨师”对象说:chushi.zuocai(tudousi) (厨师去做菜)。

“厨师”对象发现需要切菜,于是对“切菜工”对象说:qiecaigong.qiecai(tudou) (切菜工去切菜)。

特点:

以“对象”为中心: 整个程序是由一个个“对象”(object)组成的。

数据和操作绑定(封装): “厨师”这个对象,他自己拥有“厨艺”这个技能(方法/函数),也拥有“厨师等级”这个信息(数据/属性)。它们被“封装”在一起。你不需要知道厨师的刀法细节,你只需要告诉他“去做菜”,他自己就知道该怎么做。

思维方式: “我需要哪些对象?每个对象有什么功能和信息?它们之间如何协作?”

C++ 和 Java 就是典型的面向对象语言。你不再是写一步步的指令,而是先去“设计”和“定义”这些“对象”(在代码里叫 类 (Class)),比如设计一个 ChuShi (厨师) 类,定义他有什么属性(如:name, level)和什么方法(如:zuoFai(), yanfaXinCai())。

总结对比
image
为什么会出现面向对象
随着软件变得越来越复杂(比如从做一个简单的计算器,到做一个复杂的Windows操作系统),“面向过程”的方式暴露了巨大的问题:

  • 难以维护: 想象一下,一个有10000个步骤的超级菜谱。如果第500步的“盐”要改成“糖”,你可能还需要修改第2000步和第8000步(因为它们都依赖于盐)。它们紧密地“耦合”在了一起。
  • 难以复用: 你为“炒土豆丝”写了一套流程。现在你要“炒青椒肉丝”,你发现“切菜”、“倒油”、“翻炒”这些步骤很像,但你还是得把整个流程重写一遍。
    面向对象就是为了解决这些问题而生的:
  • 易维护(封装): 你只需要告诉“厨师”对象把土豆丝的“盐”改成“糖”。至于他内部具体怎么操作,是否影响其他步骤,那是他自己的事,你(经理)不用管。
  • 易复用(继承): 你可以定义一个“炒菜机器人”的“父类”,它有“倒油”、“翻炒”等基本功能。然后让“炒土豆丝机器人”和“炒青椒肉丝机器人”都去继承这个父类,它们只需要添加自己独特的功能(比如“放土豆丝”或“放肉丝”)就行了,通用的功能不用重写
posted @ 2025-10-20 01:52  一下叶川  阅读(14)  评论(0)    收藏  举报