0

0

什么是面向对象编程 (OOP)_从过程导向到对象导向的思维转变

P粉602998670

P粉602998670

发布时间:2026-02-24 17:58:41

|

565人浏览过

|

来源于php中文网

原创

面向过程代码难改因数据与行为脱钩,导致改一处引发多处错误;oop通过封装、继承、多态将数据与行为绑定,使修改局部化。

什么是面向对象编程 (oop)_从过程导向到对象导向的思维转变

面向过程代码为什么越写越难改

当你发现每次加一个新功能,都要在十几个函数里补参数、改全局变量、同步更新文档,基本就掉进过程式编程的典型陷阱了。它不是不能用,而是数据和行为完全脱钩,改一处,八处报错。

常见错误现象:segmentation fault 来得莫名其妙;name 变量在 cookNoodle() 里被意外覆盖,到 addSeasoning() 时已经不是原来那个值;新增一只狗的信息,得复制粘贴一整套 main() 和函数声明。

  • 所有数据靠全局变量或函数参数传递,没有归属感
  • 函数职责模糊——eat_food() 该打印日志?该校验狗龄?该更新饥饿值?没人管
  • 想支持“猫”或“兔子”,得重写一套几乎一样的函数,而不是复用

类不是语法糖,是责任容器

class 的本质不是多写几行 {},而是把“谁的数据”和“谁的行为”绑死。比如狗的 nameagevariety 和它的 eat()sleep() 必须属于同一个实体,外部不能绕过规则直接操作。

使用场景:你不再写 eat_food("Tom"),而是写 tom.eat()——调用动作时,对象自己带着上下文(tom 的状态)一起过去。

  • 封装不是为了“防人”,是为了让修改有边界:改 eat() 内部逻辑,不影响其他狗对象
  • 构造函数(如 Dog(String name, int age))强制你在创建时就填关键信息,避免出现“名字为空的狗”
  • 成员变量默认 private,不是教条,是防止别人在别处偷偷改 tom.age = -5

继承不是为了“省几行代码”,是为了明确 is-a 关系

别一上来就建 Animal 父类。只有当多个类型**共享同一套行为契约**,且你能清晰说出“藏獒 is a Dog”“Dog is a Animal”时,才用继承。

Python快速入门
Python快速入门

快速学习python书第二版是一本简洁清晰介绍python3的书籍,目标是新学习python 的程序员。这本更新版本囊括了所有python3版本的变化,即python从早期版本到新版本的特性变化 本书一开始用基础但是很有用的程序来传授给读者关于python的核心特性,包括语法,控制流程和数据结构。然后本书使用大型的应用程序包括代码管理,面向对象编程,web开发和转换老版本的python程序到新的版本等等。 忠实于作者的经验十足的开发者的观众,作者仔细检查普通程序特点,同时增加了更多细节关于这些python

下载

容易踩的坑:Dog 继承 Vehicle(因为“狗能跑”?不行);或者为了复用 logAction() 就硬拉个父类,结果子类根本不需要这个能力。

  • 优先考虑组合:比如 Dog 持有 HealthMonitor 实例,比继承 Monitorable 更灵活
  • Java/C# 中 protected 成员看似方便子类访问,实则破坏封装边界,多数时候用 public 方法暴露能力更安全
  • Python 的 __init__ 中忘记调用 super().__init__(),父类字段压根没初始化,但不报错——这是静默失效

多态真正起效的地方:你根本不知道对象具体是谁

多态不是炫技,是解决“我有一堆不同动物,现在统一喂食,但每种吃法不同”的问题。关键在于:调用方只认接口,不关心实现。

示例场景:遍历 List<animal></animal>,对每个元素调用 makeSound()。你不用写 if (a instanceof Dog) {...} else if (a instanceof Cat) {...}

  • 虚函数表(vtable)机制决定了性能开销极小,别因“间接调用”怕慢
  • Go 没有 class,但用接口 + 结构体方法也能实现相同效果:func (d Dog) makeSound() { ... },只要满足接口定义就自动多态
  • JavaScript 的多态更隐蔽:只要对象有 makeSound 方法,就能传给统一处理函数——但少了编译期检查,运行时 TypeError: a.makeSound is not a function 很常见

最常被忽略的一点:OOP 不是让代码变短,是让变化局部化。一个需求变更只影响一个类,而不是散落在 17 个函数里——这点在接手别人代码时,感受最深。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

850

2023.08.02

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

829

2023.08.22

go语言 面向对象
go语言 面向对象

本专题整合了go语言面向对象相关内容,阅读专题下面的文章了解更多详细内容。

57

2025.09.05

java面向对象
java面向对象

本专题整合了java面向对象相关内容,阅读专题下面的文章了解更多详细内容。

60

2025.11.27

java多态详细介绍
java多态详细介绍

本专题整合了java多态相关内容,阅读专题下面的文章了解更多详细内容。

27

2025.11.27

全局变量怎么定义
全局变量怎么定义

本专题整合了全局变量相关内容,阅读专题下面的文章了解更多详细内容。

87

2025.09.18

python 全局变量
python 全局变量

本专题整合了python中全局变量定义相关教程,阅读专题下面的文章了解更多详细内容。

102

2025.09.18

golang结构体相关大全
golang结构体相关大全

本专题整合了golang结构体相关大全,想了解更多内容,请阅读专题下面的文章。

365

2025.06.09

Golang 生态工具与框架:扩展开发能力
Golang 生态工具与框架:扩展开发能力

《Golang 生态工具与框架》系统梳理 Go 语言在实际工程中的主流工具链与框架选型思路,涵盖 Web 框架、RPC 通信、依赖管理、测试工具、代码生成与项目结构设计等内容。通过真实项目场景解析不同工具的适用边界与组合方式,帮助开发者构建高效、可维护的 Go 工程体系,并提升团队协作与交付效率。

1

2026.02.24

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

相关下载

更多

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 10.1万人学习

550W粉丝大佬手把手从零学JavaScript
550W粉丝大佬手把手从零学JavaScript

共1课时 | 0.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号