第1章:开篇——面向对象设计,到底在解决什么问题?
你好,欢迎来到《C++面向对象设计原则50讲》。
我是这门课的主讲人。在开始之前,我想先聊聊一个根本问题:我们为什么要学面向对象设计?
说白了,面向对象设计不是让你写出“能跑”的代码。而是让你写出能维护、能扩展、能复用的代码。我见过太多项目,前期冲得飞快,三个月后改一个需求要动半个系统。嗯,那种痛苦,经历过的人都懂。
一个真实的教训
我记得刚入行那会儿,接手过一个通信协议解析模块。前任开发者把所有逻辑塞进一个类里,足足三千行。我当时年轻,心想“能跑就行”。结果呢?客户要新增一种报文类型,我改了三天,改出了三个新bug。
为什么会这样?因为代码耦合太紧。一个类的职责太多,牵一发而动全身。这就是典型的违反单一职责原则。
从那天起,我下定决心:设计,必须前置。
面向对象设计的核心目标
面向对象设计不是玄学。它的目标很明确:
- 可维护性——改一处,不影响其他地方
- 可扩展性——加新功能,尽量不改旧代码
- 可复用性——写一次,多处用
你想想看,这三个目标是不是每个项目都想要?但真正做到的,不多。
50讲的整体脉络
这50讲,我会带你系统梳理面向对象设计的核心原则。不是枯燥的理论,而是结合我十几年C++开发中的真实案例。
下面这张图,帮你快速了解整个课程的知识体系:
这门课怎么学?
我的建议是:不要一口气看完。每讲一个原则,你就停下来,看看自己手头的代码,有没有可以改进的地方。
我曾经带过一个团队,每周五下午专门做“设计评审”。大家把代码投影出来,对照原则一条条过。刚开始很痛苦,但坚持三个月后,代码质量肉眼可见地提升。
💡 学习小技巧:每学完一个原则,试着用一句话讲给同事听。如果你能讲清楚,说明你真的懂了。
你需要准备什么?
- 一个C++开发环境(VS、CLion、或者Vim + g++都行)
- 一个你正在做的项目(或者一个开源项目)
- 开放的心态——有些设计理念可能和你现在的习惯不一样
⚠️ 注意:设计原则不是教条。不要为了用原则而用原则。过度设计比没有设计更可怕。我见过有人为了“完美”设计,一个简单的工具类搞出五层继承——结果没人看得懂。
一个小练习
在开始下一讲之前,我建议你做一件事:
打开你最近写的一个C++类,问自己三个问题:
- 这个类的职责是否清晰?能不能用一句话说清楚它做什么?
- 如果需求变化,这个类需要改多少地方?
- 这个类能不能被其他项目复用?
如果三个问题的答案都不太理想,别担心。这正是我们这门课要解决的问题。
好,我们下一讲见。
公众号:蓝海资料掘金营,微信 deep3321