Python篇---面向对象与面向过程
一、是什么做菜 vs 管厨房面向过程就像一道菜的菜谱。你关注的是“步骤流”第一步洗菜第二步切菜第三步倒油第四步下锅炒……数据菜和函数洗、切、炒是分开的。菜是一个被动的东西谁都可以对它操作。面向对象则像在经营一个现代化厨房。你把不同的人请来洗菜工、切菜工、厨师。每个人不仅有自己的技能方法还负责管理自己的工具和食材数据。比如你要炒菜不用管菜是怎么切的只需要对厨师说“用切好的菜炒一盘宫保鸡丁”。核心区别面向过程围绕“做什么”的动作来组织代码。面向对象围绕“谁来做”的事物来组织代码。二、为什么各自解决了什么问题面向过程问题早期程序逻辑简单直接任务单一。优势符合直觉上手快。对于小脚本、单一功能代码执行路径清晰性能开销小。例子写一个自动化脚本把文件夹里所有图片压缩一下。过程很清晰打开文件夹 → 遍历文件 → 调用压缩库 → 保存。用面向过程几行代码就完事了。面向对象问题软件规模越来越大多人协作时如果数据到处流转谁都能改很容易出 Bug 且难以定位。优势封装与安全比如“用户”对象里的“余额”你不能直接从外面改成负数。只能通过“取款”方法里面有检查逻辑。数据被保护起来了。复用与扩展有个“动物”模板你可以轻松造出“狗”、“猫”它们继承动物的共同特征再各自实现不同的“叫声”。不用每次都从头写。复杂系统建模对电商系统来说你自然就会把用户、订单、商品当作对象来思考这很符合人类的认知习惯。三、怎样做两种设计思路的实践面向过程的做法精髓是自顶向下逐步细化。把大任务拆成步骤1、2、3。每个步骤写成一个函数。按顺序调用函数数据在函数间传递。典型代码风格用C语言的思维写Python# 数据是孤立的字典 student {name: 小明, score: 85} # 函数是独立的专门处理这种数据 def print_grade(s): if s[score] 90: grade A else: grade B print(f{s[name]}是{grade}) print_grade(student)面向对象的做法精髓是抽象出类和对象明确职责和交互。找到问题里的实体。把实体的属性数据和行为方法封装成类。通过对象之间的消息传递方法调用协作完成任务。典型代码风格class Student: def __init__(self, name, score): self.name name # 属性姓名 self.__score score # 私有属性分数外部无法直接改 def get_grade(self): # 方法获取等级 if self.__score 90: return A return B # 对象是数据和行为的结合体 stu Student(小明, 85) print(f{stu.name}是{stu.get_grade()})四、现实中的选择绝非“面向对象一定更好”。适合用面向过程脚本、工具函数、数据处理流水线、简单的CRUD。比如你用Python写个爬虫或者数据分析很可能就是流水账的过程式代码效率高。适合用面向对象复杂的桌面软件、游戏、大型Web系统后台。当你需要管理各种状态模块间高度交互时面向对象的优势才会体现。实际上绝大多数项目是两者混合的。我们用面向对象的思维来设计顶层架构用户模块、订单模块但在具体实现一个算法比如排序时用的依然是面向过程的函数。五、Mermaid 总结框图