第1章:开篇——面向对象设计,到底在解决什么问题?

你好,欢迎来到《C++面向对象设计原则50讲》。

我是这门课的主讲人。在开始之前,我想先聊聊一个根本问题:我们为什么要学面向对象设计?

说白了,面向对象设计不是让你写出“能跑”的代码。而是让你写出能维护、能扩展、能复用的代码。我见过太多项目,前期冲得飞快,三个月后改一个需求要动半个系统。嗯,那种痛苦,经历过的人都懂。

一个真实的教训

我记得刚入行那会儿,接手过一个通信协议解析模块。前任开发者把所有逻辑塞进一个类里,足足三千行。我当时年轻,心想“能跑就行”。结果呢?客户要新增一种报文类型,我改了三天,改出了三个新bug。

为什么会这样?因为代码耦合太紧。一个类的职责太多,牵一发而动全身。这就是典型的违反单一职责原则

从那天起,我下定决心:设计,必须前置。

面向对象设计的核心目标

面向对象设计不是玄学。它的目标很明确:

  • 可维护性——改一处,不影响其他地方
  • 可扩展性——加新功能,尽量不改旧代码
  • 可复用性——写一次,多处用

你想想看,这三个目标是不是每个项目都想要?但真正做到的,不多。

50讲的整体脉络

这50讲,我会带你系统梳理面向对象设计的核心原则。不是枯燥的理论,而是结合我十几年C++开发中的真实案例。

下面这张图,帮你快速了解整个课程的知识体系:

面向对象设计原则50讲 · 知识体系 七大设计原则 设计模式实战 重构与演进 单一职责 · 开闭 · 里氏替换 接口隔离 · 依赖倒置 · 迪米特 组合复用原则 创建型 · 结构型 · 行为型 工厂 · 策略 · 观察者 · 单例 适配器 · 装饰器 · 模板方法 坏味道识别 · 重构手法 测试驱动 · 持续集成 代码评审 · 设计文档 目标:写出可维护、可扩展、可复用的C++代码

这门课怎么学?

我的建议是:不要一口气看完。每讲一个原则,你就停下来,看看自己手头的代码,有没有可以改进的地方。

我曾经带过一个团队,每周五下午专门做“设计评审”。大家把代码投影出来,对照原则一条条过。刚开始很痛苦,但坚持三个月后,代码质量肉眼可见地提升。

💡 学习小技巧:每学完一个原则,试着用一句话讲给同事听。如果你能讲清楚,说明你真的懂了。

你需要准备什么?

  • 一个C++开发环境(VS、CLion、或者Vim + g++都行)
  • 一个你正在做的项目(或者一个开源项目)
  • 开放的心态——有些设计理念可能和你现在的习惯不一样

⚠️ 注意:设计原则不是教条。不要为了用原则而用原则。过度设计比没有设计更可怕。我见过有人为了“完美”设计,一个简单的工具类搞出五层继承——结果没人看得懂。

一个小练习

在开始下一讲之前,我建议你做一件事:

打开你最近写的一个C++类,问自己三个问题:

  1. 这个类的职责是否清晰?能不能用一句话说清楚它做什么?
  2. 如果需求变化,这个类需要改多少地方?
  3. 这个类能不能被其他项目复用?

如果三个问题的答案都不太理想,别担心。这正是我们这门课要解决的问题。

好,我们下一讲见。


公众号:蓝海资料掘金营,微信 deep3321