第Ⅰ部分 敏捷开发 2
第1章 敏捷实践 2
1.1 敏捷联盟 3
1.2 原则 6
1.3 结论 8
参考文献 8
第2章 极限编程概述 9
2.1 极限编程实践 9
2.2 结论 16
参考文献 16
第3章 计划 17
3.1 初始探索 17
3.2 发布计划 18
3.3 迭代计划 18
3.4 任务计划 19
3.5 迭代 20
3.6 结论 20
参考文献 20
第4章 测试 21
4.1 测试驱动的开发方法 21
4.2 验收测试 24
4.3 结论 27
参考文献 27
第5章 重构 28
5.1 素数产生程序:一个简单的重构示例 29
5.2 结论 38
参考文献 38
第6章 一次编程实践 39
6.1 保龄球比赛 39
6.2 结论 75
第Ⅱ部分 敏捷设计 79
第7章 什么是敏捷设计 79
7.1 软件出了什么错 79
7.2 设计的臭味——腐化软件的气味 80
7.3 “Copy”程序 82
7.4 保持尽可能好的设计 86
7.5 结论 86
参考文献 87
第8章 单一职责原则(SRP) 88
8.1 单一职责原则(SRP) 88
8.2 结论 91
参考文献 91
第9章 开放-封闭原则(OCP) 92
9.1 开放-封闭原则(OCP) 92
9.2 描述 93
9.3 关键是抽象 93
9.4 结论 101
参考文献 101
第10章 Liskov替换原则(LSP) 102
10.1 Liskov替换原则(LSP) 102
10.2 一个违反LSP的简单例子 103
10.3 正方形和矩形,更微妙的违规 104
10.4 一个实际的例子 108
10.5 用提取公共部分的方法代替继承 112
10.6 启发式规则和习惯用法 114
10.7 结论 115
参考文献 115
第11章 依赖倒置原则(DIP) 116
11.1 依赖倒置原则(DIP) 116
11.2 层次化 117
11.3 一个简单的例子 118
11.4 熔炉示例 120
11.5 结论 122
参考文献 122
第12章 接口隔离原则(ISP) 123
12.1 接口污染 123
12.2 分离客户就是分离接口 124
12.3 接口隔离原则(ISP) 125
12.4 类接口与对象接口 125
12.5 ATM用户界面的例子 127
12.6 结论 132
参考文献 132
第Ⅲ部分 薪水支付案例研究 137
第13章 COMMAND模式和ACTIVE OBJECT模式 137
13.1 简单的COMMAND 138
13.2 事务操作 139
13.3 UNDO 140
13.4 ACTIVE OBJECT模式 141
13.5 结论 144
参考文献 144
第14章 TEMPLATE METHOD模式和STRATEGY模式:继承与委托 145
14.1 TEMPLATE METHOD模式 145
14.2 STRATEGY模式 151
14.3 结论 155
参考文献 155
第15章 FACADE模式和MEDIATOR模式 156
15.1 FACADE模式 156
15.2 MEDIATOR模式 157
15.3 结论 159
参考文献 159
第16章 SINGLETON模式和MONOSTATE模式 160
16.1 SINGLETON模式 161
16.2 MONOSTATE模式 163
16.3 结论 169
参考文献 169
第17章 NULL OBJECT模式 170
17.1 结论 172
参考文献 172
第18章 薪水支付案例研究:第一次迭代开始 173
18.1 介绍 173
18.2 基于用例分析 174
18.3 反思:我们学到了什么 180
18.4 找出潜在的抽象 180
18.5 结论 182
参考文献 182
第19章 薪水支付案例研究:实现 183
19.1 增加雇员 183
19.2 删除雇员 188
19.3 时间卡、销售凭条以及服务费用 190
19.4 更改雇员属性 196
19.5 支付雇员薪水 208
19.6 主程序 220
19.7 数据库 221
19.8 薪水支付系统设计总结 222
参考文献 222
第Ⅳ部分 打包薪水支付系统 224
第20章 包的设计原则 224
20.1 如何进行包的设计 224
20.2 粒度:包的内聚性原则 225
20.3 稳定性:包的耦合性原则 227
20.4 自顶向下设计 231
20.5 稳定依赖原则 232
20.6 稳定抽象原则 235
20.7 结论 237
第21章 FACTORY模式 238
21.1 依赖关系环 239
21.2 可替换的工厂 240
21.3 对测试支架使用对象工厂 241
21.4 使用对象工厂有多么重要 242
21.5 结论 242
参考文献 242
第22章 薪水支付案例研究(第2部分) 243
22.1 包结构和表示法 243
22.2 应用公共封闭原则(CCP) 245
22.3 应用重用发布等价原则(REP) 246
22.4 耦合和封装 247
22.5 度量 249
22.6 度量薪水支付应用程序 250
22.7 对象工厂 253
22.8 最终的包结构 255
22.9 结论 256
参考文献 256
第Ⅴ部分 气象站案例研究 258
第23章 COMPOSITE模式 258
23.1 示例:组合命令 259
23.2 多重性还是非多重性 259
第24章 OBSERVER模式——回归为模式 261
24.1 数字时钟 261
24.2 结论 275
24.3 OBSERVER模式 275
参考文献 277
第25章 ABSTRACT SERVER模式、ADAPTER模式和BRIDGE模式 278
25.1 ABSTRACT SERVER模式 279
25.2 ADAPTER模式 279
25.3 BRIDGE模式 283
25.4 结论 285
参考文献 285
第26章 PROXY模式和STAIRWAY TO HEAVEN模式:管理第三方API 286
26.1 PROXY模式 286
26.2 STAIRWAY TO HEAVEN模式 303
26.3 可以用于数据库的其他模式 309
26.4 结论 310
参考文献 310
第27章 案例研究:气象站 311
27.1 Cloud公司 311
27.2 Nimbus-LC软件设计 313
27.3 结论 333
参考文献 333
27.4 Nimbus-LC需求概述 333
27.5 Nimbus-LC用例 334
27.6 Nimbus-LC发布计划 336
第Ⅵ部分 ETS案例研究 340
第28章 VISITOR模式 340
28.1 VISITOR设计模式系列 340
28.2 VISITOR模式 340
28.3 ACYCLIC VISITOR模式 344
28.4 DECORATOR模式 353
28.5 EXTENSION OBJECT模式 358
28.6 结论 367
参考文献 367
第29章 STATE模式 368
29.1 有限状态自动机概述 368
29.2 实现技术 369
29.3 STATE模式 374
29.4 应该在哪些地方使用状态机 379
29.5 作为GUI中的高层应用策略 379
29.6 结论 382
29.7 程序 382
参考文献 388
第30章 ETS框架 389
30.1 介绍 389
30.2 框架 392
30.3 框架设计 394
30.4 TEMPLATE METHOD模式的一个例子 399
30.5 TASKMASTER构架 407
30.6 结论 410
参考文献 410
附录 411
附录A UML表示法Ⅰ:CGI示例 411
A.1 课程登记系统:问题描述 412
A.2 小结 431
参考文献 431
附录B UML表示法Ⅱ:统计多路复用器 432
B.1 统计多路复用器的定义 432
B.2 结论 448
参考文献 448
附录C 两个公司的讽刺小品 449
附录D 源代码就是设计 459
索引 467