设计模式课程 第1讲 —— 课程概述
授课教师:王亚沙(北京大学软件研究所,副教授,博士) 课程编号:0C107 来源:田浩然上传的资料 / 0C107设计模式 / ss-01(概述).pdf
一、课程定位
这是一门从 C++ 语言 → 设计原则 → 设计模式 层层递进的软件设计课程,不是孤立地讲模式,而是把设计模式放在软件工程思想的整体框架中理解。
课程强调:编程语言和设计模式都是工具,学习者要作工具的主人——不仅会用,还要理解其内涵、知道其适用边界。
二、课程内容三大模块
1. C++ 语言部分
- 以 C 语言为基础,通过对比 C 与 C++ 的差异来讲解
- 不是从零教语法,而是聚焦 C++ 作为面向对象编程语言的核心特征
- 重点内容:
- 封装、继承、多态 —— 三大 OOPL 特性的底层实现
- 常量(const)的使用方法
- 引用和拷贝构造
- 背后的软件工程思想:每个语言特征都对应某种设计理念,不是语法糖那么简单
2. 软件设计原则
- 坏设计的特征:糟糕的软件设计有哪些普遍症状?会带来什么隐患?
- 好设计的原则:优秀软件设计应遵循哪些基本设计原则?遵循它们的收益是什么?
- 这是连接语言和模式的桥梁——设计原则是模式背后的”道”,模式是原则在具体场景下的”术”
3. 软件设计模式
设计模式的定义:优秀的软件工程师在工程实践中,为解决某类问题而反复采用的设计方案,是软件设计师工程创新的成果和实践经验的总结。
- 讲解典型设计模式(后续讲次逐步展开)
- 重点不是背模式,而是分析模式与设计原则之间的关系
- 理解了原则,才能灵活运用模式,而不是生搬硬套
三、参考书目
C++ 语言
| 类型 | 书名 | 作者/译者 | 出版社 |
|---|---|---|---|
| 主教材 | 《C++ 编程思想》 | Bruce Eckel 著 / 刘宗田等译 | 机械工业出版社,2000.1 |
| 辅助教材 | 《C++ 程序设计教程》 | 钱能等著 | 清华大学出版社,2000.07 |
| 辅助教材 | 《Essential C++ 中文版》 | Stanley B. Lippman 著 / 侯捷译 | 华中科技大学出版社,2001.8 |
软件设计
| 类型 | 书名 | 作者/译者 | 出版社 |
|---|---|---|---|
| 主教材 | 《敏捷软件开发:原则、模式与实践》 | Robert C. Martin 著 / 邓辉 译 | 清华大学出版社,2003.9 |
| 辅助教材 | 《设计模式:可复用面向对象软件的基础》(GoF) | Erich Gamma / Richard Helm / Ralph Johnson / John Vlissides 著 / 李英军等译 | 机械工业出版社,2005.6 |
关联笔记:《敏捷软件开发》-原则模式与实践-Robert-C-Martin、《设计模式》-可复用面向对象软件的基础-GoF
四、学习方法论(王亚沙的三条建议)
1. 学而时习之 —— 马背上读兵书
理论与实践迅速结合。
不要先把理论全部学完再动手,而是边学边练,在实践中立刻验证和消化理论。设计模式和编程语言都是实践性极强的知识,光看不写永远学不会。
2. 作主而当家 —— 做工具的主人
编程语言、设计模式都是软件开发的工具,要把自己作为这些工具的主人——不但是应用工具的主人,而且还是制造这些工具的主人。
- 不断思辨,深入了解工具的内涵
- 理解为什么要有这个特性/模式,而不只是记住怎么用
- 只有理解了底层原理和设计意图,才能游刃有余
3. 登堂再入室 —— 从编程到理解计算机
不仅只是学习编程,而且将其作为理解计算机的有效途径。
编程语言和设计模式是理解整个计算机体系的一个入口。从语言特性可以反推编译器、运行时、操作系统的设计;从设计模式可以理解软件架构的演进逻辑和工程权衡。
五、考核方式
- 作业 50%:2-3 次
- 考试 50%
(暂定方案)
六、课程全景图(后续讲次关联)
本课程的知识递进关系:
C++ 语言特性(ss-02)
↓ 底层机制支撑
设计原则(ss-03)—— SRP / OCP / LSP / DIP / ISP
↓ 原则在场景中的具象化
设计模式(ss-04 ~ ss-09)
↓ 模式组合运用
综合实例(ss-05 / ss-07)
↓ 串讲总结
课程总复习
关联笔记:
- 设计模式课程-第2讲-C++语言特性(ss-02)
- 设计模式课程-第3讲-设计原则(ss-03)
- 设计模式课程-第4讲-Pattern-1-Facade-Adapter-Strategy-Bridge-AbstractFactory(ss-04 Pattern 1)
- 设计模式课程-第5讲-消息机制(ss-05 消息机制)
- 设计模式综合实例(CAD/CAM + 电子商务)-第5讲(ss-05 比较大的实例)
- 设计模式课程-第6讲-Pattern-1(ss-06 Pattern 1)
- 设计模式课程-第6讲-Pattern-2-Decorator-Observer-TemplateMethod(ss-06 Pattern 2)
- 设计模式综合实例(CAD/CAM + 电子商务)-第7讲(ss-07 比较大的实例)
- 设计模式课程-第8讲-Pattern-2-Decorator-Observer-TemplateMethod(ss-08 Pattern 2)
- 设计模式课程-第9讲-Pattern-3(ss-09 Pattern 3)
七、个人感悟
这门课的独特之处在于不孤立地讲设计模式,而是从语言特性出发,先讲清楚面向对象的底层机制(封装/继承/多态在C++中是怎么实现的),再讲设计原则(为什么要这么设计),最后才讲设计模式(具体场景下的成熟方案)。这种”语言→原则→模式”的三层递进,比直接啃 GoF 那 23 个模式要系统得多。
三条学习建议也很有分量,特别是”作主而当家”——工具是为人服务的,理解其本质才能灵活运用,否则就只是会调用 API 的码农。