面向过程 VS 面向对象:洗衣服的两种人生
作为一个Java工程师,经常被问到:"面向过程和面向对象到底有什么区别?"今天我们就用最接地气的例子——洗衣服,来聊聊这两种编程思想。
洗衣服的两种打开方式
面向过程:流水线作业
想象你是个效率狂人,洗衣服就像执行一套标准流程:
放衣服 → 加洗衣液 → 加水 → 洗涤 → 脱水
这就是面向过程的思维:把复杂问题拆解成一个个步骤,按顺序执行。就像工厂流水线,每个环节都有明确的职责,一环扣一环。
面向对象:分工合作
// 创建两个“演员”
Person 小明 = new Person("小明", 25);
WashingMachine 洗衣机 = new WashingMachine("海尔", "白色");
// 开始表演
小明.放衣服();
小明.加洗衣液();
洗衣机.洗涤();
洗衣机.漂洗();
洗衣机.脱水();
每个对象都有自己的"人设":
- 人:有姓名、年龄等属性,会放衣服、加洗衣液等技能
- 洗衣机:有品牌、颜色等属性,会洗涤、漂洗、脱水等功能
对比
面向过程:直来直往的实用主义
优点
- 代码清晰, 将业务分解成若干个步骤, 每个步骤用函数实现,自上而下运行
- 执行效率高, 没有多余的包装
- 适合解决具体问题, 比如实现排序算法等
缺点
- 代码像是意大利面条, 牵一发而动全身
- 扩展性差, 想加个功能? 那重写吧
- 复用性差, 天天重复造轮子
代表语言: C语言(老大哥就是这么朴实无华)
面向对象:优雅的建筑师
优点
- 更贴近人类思维, 这个世界就是一个个对象
- 代码复用性强
- 维护方便
- 扩展性好
缺点
- 学习成本高, 需要理解抽象概念
- 可能造成过度设计
代表语言: Java、C++、Python等(现代编程语言的主流选择)
面向对象的“3+5”
3个基本特征
- 封装:把数据和方法打包,外人只能通过规定的接口访问
- 继承:子类可以继承父类的特征,站在巨人的肩膀上
- 多态:同一个接口,不同的实现,一个遥控器控制多种设备
5个基本原则
- 单一职责原则
- 开发封闭原则
- Liskov替换原则
- 依赖倒置原则
- 接口隔离原则