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

news/2025/10/20 1:54:28/文章来源:https://www.cnblogs.com/mao4399/p/19151667

用一个简单的比喻来帮助你理解:“如何完成一顿饭?”
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步(因为它们都依赖于盐)。它们紧密地“耦合”在了一起。
  • 难以复用: 你为“炒土豆丝”写了一套流程。现在你要“炒青椒肉丝”,你发现“切菜”、“倒油”、“翻炒”这些步骤很像,但你还是得把整个流程重写一遍。
    面向对象就是为了解决这些问题而生的:
  • 易维护(封装): 你只需要告诉“厨师”对象把土豆丝的“盐”改成“糖”。至于他内部具体怎么操作,是否影响其他步骤,那是他自己的事,你(经理)不用管。
  • 易复用(继承): 你可以定义一个“炒菜机器人”的“父类”,它有“倒油”、“翻炒”等基本功能。然后让“炒土豆丝机器人”和“炒青椒肉丝机器人”都去继承这个父类,它们只需要添加自己独特的功能(比如“放土豆丝”或“放肉丝”)就行了,通用的功能不用重写

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/940723.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Codeforces Round 1060 (Div. 2)

A. Notelock 题意:一个二进制串,问有多少位置的前\(k-1\)个位置没有\(1\)。 从前往后扫,维护一个可以包含的最右位置就行。点击查看代码 #include <bits/stdc++.h>using i64 = long long;void solve() {int n…

https://img2024.cnblogs.com/blog/3001825/202510/3001825-20251020014716729-439844091.png

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

Luogu P14260 期待(counting) 题解 [ 蓝 ] [ 前缀和 ] [ 组合计数 ]

期待:按照部分分一步一步去想应该是不难出正解的,这题难点应该在于实现上。 看到题感觉不太好直接入手,于是先考虑特殊性质。特殊性质 A 的做法比较神秘,特殊性质 B 就是个骗分的,没啥启发性。 而特殊性质 C 是真…

golang unique包和字符串内部化

最近在做老系统优化,正好遇到了需要使用字符串内部化的场景,所以今天就来说说字符串内部化这种优化技巧。 什么是字符串内部化 熟悉Java或者python的开发者应该对“内部化”这种技术不陌生。内部化指的是对于内容完全…

EasySQLite 升级到.slnx 格式后的性能优化效果解析

一、升级动因与行业趋势 1.1 传统.sln 文件的技术瓶颈 在.NET 开发领域,解决方案文件 (.sln) 长期作为项目管理核心,但二十余年未变的自定义文本格式逐渐显现技术瓶颈。该格式包含大量重复配置信息与 GUID 引用,简单…

mochi-mqtt/server golang mqtt 包

mochi-mqtt/server golang mqtt 包最近在学习nats 的mqtt 能力,默认nats mqtt 的实现是3.1.1 的,同时想着集成nanomq 的bridge 进行桥接实现共享订阅的能力,但是发现有一个兼容的问题,似乎是nanomq 在发送3.1.1 协…

有了异步i/o的话,还需要协程么

1、异步 I/O 和协程区别 这个其实触及了高并发架构的底层原理:“异步 I/O 和协程有什么区别?如果我已经用异步 I/O(如 NIO、Netty、epoll),还需要协程吗?”我们来一步步拆开讲清楚(这题很多人理解偏差)👇一、…

永久暂停window10更新,不想更新到window11

视频:https://www.bilibili.com/video/BV1jsTMz9EUz?t=144.0 饱受自动更新之苦,现提供一个3分钟可以“永久”关闭Windows更新的思路。具体步骤: 1、Win+R,regedit打开注册表编辑器; 2、找到路径HKEY_LOCAL_MACHI…

102302148谢文杰第一次数据采集作业

第一题 核心代码与运行结果点击查看代码 import requests from bs4 import BeautifulSoup# 目标URL:2020年中国大学排名页面 url="http://www.shanghairanking.cn/rankings/bcur/2020" response=requests.g…

算法第二章作业

找第 k 小的数的分治算法自然语言描述: 找第 k 小的数的分治算法,首先要选择一个基准元素,然后将数组分成两部分,一部分是小于等于基准元素的数,另一部分是大于基准元素的数。假设基准元素在划分后位于数组的第 m…

完全免费的 claude 工具,真香!

完全免费的 claude 工具,真香!刚把我这段时间用 puter 搭的一个 Claude 对话小工具上线了,免费的。 它不是那种“神乎其神”的产品,但确实帮我写方案、理思路、看代码,节省了很多来回搜索的时间。 登录即可使用,…

RaspberryPi 个人服务搭建

# RaspberryPi 个人服务搭建 > 树莓派及其他debian衍生版本服务> > 版本:Linux debian 6.12.48+deb13-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.12.48-1 (2025-09-20) x86_64 GNU/Linux> > 日期:2025年…

tryhackme-预安全-网络如何工作-网站如何工作-11

tryhackme-Pre Security-How The Web Works-How Websites Work 房间地址:https://tryhackme.com/room/howwebsiteswork 这是网络安全入门的基础模块的计算机科学基础知识:How Websites Work(网站如何工作),序号 0…

2025塑料托盘优质厂家推荐,力森塑业科技多元化产品满足各类需求!

2025塑料托盘优质厂家推荐,力森塑业科技多元化产品满足各类需求!随着物流仓储行业的快速发展,塑料托盘作为重要的物流工具,其市场需求日益增长。然而,当前塑料托盘领域面临着诸多技术挑战,这些问题不仅影响了产品…

嵌入式实验3串口通信--任务二USART1通信

1)STM32系统给上位机(win10)连续发送“hello windows!”,win10采用“串口助手”工具接收。如果STM32的连续发送之间不加延时语句,观察win10端是否出现接收数据丢失的现象。 1.1在STM32CubeMX中建立一个新的工程。…

[SSH] sftp 基于SSH的交互式文件传输工具

[SSH] sftp 基于SSH的交互式文件传输工具$(".postTitle2").removeClass("postTitle2").addClass("singleposttitle");目录01 背景1.1 简介1.2 sftp 与 ftp 的对比1.3 sftp 与 scp 适用场…

java.math 包详解

java.math 包详解java.math 包是 Java 提供的用于高精度数学计算的工具包,主要包含两个核心类:BigInteger 和 BigDecimal。这些类用于处理超出基本数据类型范围的数值运算。 1. BigInteger 类BigInteger 用于表示任意…

Drive Snapshot

Drive SnapshotAcronis True ImageATI老版本非常棒

Python接入A股level2千档盘口和逐笔委托

Python接入A股level2千档盘口和逐笔委托本文将以实际的代码实践为例,探讨如何通过一套集成了A股基础行情、Level-2高速行情WebSocket接口、量化交易接口与金融数据库的服务,来系统性地解决这些问题。你将看到如何用简…

20232319 2025-2026-1 《网络与系统攻防技术》实验二实验报告

一、实验内容 1.实践目标 (1)使用netcat获取主机操作Shell,cron启动某项任务(任务自定) PS:cron是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程 (2)使用socat获取主机操作Shell, 任务计划启动…