第1篇 概念 2
第1章 复杂性 2
1.1复杂系统的结构 3
1.1.1个人计算机的结构 3
1.1.2植物和动物的结构 4
1.1.3物质的结构 5
1.1.4社会机构的结构 5
1.2软件固有的复杂性 6
1.2.1定义软件复杂性 6
1.2.2为什么软件在本质上是复杂的 7
1.3复杂系统的5个属性 11
1.3.1层次结构 11
1.3.2相对本原 12
1.3.3分离关注 12
1.3.4共同模式 12
1.3.5稳定的中间形式 13
1.4有组织和无组织的复杂性 13
1.4.1复杂系统的规范形式 13
1.4.2人在处理复杂性时的能力局限 16
1.5从混沌到有序 17
1.5.1分解的作用 17
1.5.2抽象的作用 21
1.5.3层次结构的作用 22
1.6复杂系统的设计 23
1.6.1作为科学和艺术的工程 23
1.6.2设计的含义 23
1.7小结 26
第2章 对象模型 27
2.1对象模型的演进 27
2.1.1程序设计语言的换代 28
2.1.2第一代和第二代早期程序设计语言的拓扑结构 30
2.1.3第二代后期和第三代早期程序设计语言的结构 31
2.1.4第三代后期程序设计语言的结构 32
2.1.5基于对象和面向对象的程序设计语言的结构 33
2.2对象模型基础 35
2.2 1面向对象编程 38
2.2.2面向对象设计 39
2.2.3面向对象分析 40
2.3对象模型要素 40
2.3.1抽象的意义 42
2.3.2封装的意义 48
2.3.3模块化的意义 51
2.3.4层次结构的意义 55
2.3.5类型的意义 61
2.3.6并发的意义 64
2.3.7持久的意义 66
2.4应用对象模型 68
2.4.1对象模型的好处 69
2.4.2开放式问题 70
2.5小结 70
第3章 类与对象 71
3.1对象的本质 71
3.1.1什么是对象,什么不是对象 72
3.1.2状态 74
3.1.3行为 77
3.1.4标识符 81
3.2对象之间的关系 83
3.2.1链接 84
3.2.2聚合 87
3.3类的本质 88
3.3.1什么是类,什么不是类 88
3.3.2接口和实现 90
3.3.3类的生命周期 91
3.4类之间的关系 92
3.4.1关联 92
3.4.2继承 94
3.4.3聚合 105
3.4.4依赖关系 106
3.5类与对象的互动 106
3.5.1类与对象的关系 107
3.5.2类与对象在分析和设计中的角色 107
3.6创建高品质的类与对象 107
3.6.1评判一种抽象的品质 108
3.6.2选择操作 109
3.6.3选择关系 111
3.6.4选择实现 113
3.7小结 114
第4章 分类 115
4.1正确分类的重要性 115
4.1.1分类的困难 116
4.1.2分类的增量和迭代本质 118
4.2确定类和对象 120
4.2.1经典方法和现代方法 120
4.2.2面向对象分析 124
4.3关键抽象与机制 132
4.3.1确定关键抽象 132
4.3.2识别机制 134
4.4小结 137
第2篇 方法 140
第5章 表示法 140
5.1统一建模语言 140
5.1.1简单历史回顾 141
5.1.2模型与多重视图 141
5.1.3图分类 142
5.1.4在实践中使用图 144
5.1.5概念模型、逻辑模型和物理模型 145
5.1.6工具的角色 145
5.1.7面向对象开发的产品 146
5.1.8规模上的伸缩 147
5.1.9 UML的语法和语义 147
5.1.10 UML 2.0信息资源 148
5.2包图 148
5.2.1基本概念:包表示法 149
5.2.2基本概念:元素的可见性 150
5.2.3基本概念:依赖关系 151
5.2.4基本概念:包图 152
5.2.5高级概念:导入和访问 154
5.3组件图 156
5.3.1基本概念:组件表示法 157
5.3.2基本概念:组件图 158
5.3.3基本概念:组件接口 160
5.3.4基本概念:组件实现 161
5.3.5高级概念:组件的内部结构 163
5.4部署图 164
5.4.1基本概念:工件表示法 165
5.4.2基本概念:节点表示法 165
5.4.3基本概念:部署图 166
5.5用例图 168
5.5.1基本概念:执行者 169
5.5.2基本概念:用例 169
5.5.3基本概念:用例图 169
5.5.4高级概念:《include》和《extend》关系 172
5.5.5高级概念:泛化 176
5.6活动图 177
5.6.1基本概念:动作 178
5.6.2基本概念:开始和停止 178
5.6.3基本概念:判断节点和合并节点 179
5.6.4基本概念:分区 179
5.6.5高级概念:分叉、结合和并发 180
5.6.6高级概念:对象流 182
5.6.7高级概念:其他元素 182
5.7类图 182
5.7.1基本概念:类表示法 184
5.7.2基本概念:类关系 186
5.7.3高级概念:模板(参数化)类 189
5.7.4高级概念:可见性 190
5.7.5高级概念:关联端名称和限定符 191
5.7.6高级概念:约束 192
5.7.7高级概念:关联类和注解 196
5.8序列图 197
5.8.1.基本概念:对象与交互 197
5.8.2基本概念:生命线与消息 198
5.8.3高级概念:销毁事件 199
5.8.4高级概念:执行说明 200
5.8.5高级概念:交互使用 201
5.8.6高级概念:控制结构 201
5.9交互概述图 204
5.9.1基本概念:框 204
5.9.2基本概念:控制流元素 204
5.9.3基本概念:交互图元素 206
5.10组合结构图 206
5.10.1基本概念:组合结构的部分 206
5.10.2基本概念:组合结构的部分与接口 207
5.10.3基本概念:组合结构连接器 208
5.10.4高级概念:协作 208
5.11状态机图 209
5.11.1基本概念:初始状态、最终状态和简单状态 210
5.11.2基本概念:转换与事件 211
5.11.3高级概念:状态活动——入口活动、执行活动和出口活动 213
5.11.4高级概念:控制转换 213
5.11.5高级概念:复合状态与嵌套状态 215
5.11.6高级概念:并发与控制 216
5.11.7高级概念:子状态机状态 221
5.11.8高级概念:其他状态机图元素 222
5.12时间图 222
5.12.1基本概念:更多相同之处 223
5.12.2基本概念:布局 223
5.12.3基本概念:事件 224
5.12.4基本概念:约束 224
5.12.5高级概念:另一种表示形式 225
5.12.6高级概念:事件与消息 226
5.13对象图 226
5.13.1基本概念:对象 227
5.13.2基本概念:对象关系 228
5.13.3高级概念:端点名称和限定符 229
5.14通信图 230
5.14.1基本概念:对象、链接和消息 230
5.14.2基本概念:顺序表达式 230
5.14.3高级概念:消息与同步 233
5.14.4高级概念:迭代子句和警戒条件 233
5.15 小结 234
第6章 过程 236
6.1首要原则 236
6.1.1成功项目的特征 236
6.1.2追求理性的开发过程 240
6.2宏观过程:软件开发生命周期 244
6.2.1概述 244
6.2.2宏观过程的内容维:科目 246
6.2.3宏观过程的时间维:里程碑和阶段 249
6.2.4宏观过程的时间维:迭代 255
6.2.5发行计划 257
6.3微观过程:分析与设计过程 260
6.3.1概述 260
6.3.2抽象层次 261
6.3.3活动 262
6.3.4产品 263
6.3.5微观过程与抽象层次 267
6.3.6识别元素 270
6.3.7确定元素间的协作 274
6.3.8确定元素间的关系 278
6.3.9详细确定元素的语义 281
6.4小结 285
第7章 实战 287
7.1管理和计划 288
7.1.1风险管理 288
7.1.2任务计划 289
7.1.3开发复查 290
7.2人员配备 292
7.2.1资源配置 292
7.2.2开发团队角色 293
7.3发布版本管理 296
7.3.1配置管理和版本控制 296
7.3.2集成 297
7.3.3测试 298
7.4复用 298
7.4.1复用的元素 298
7.4.2建立复用制度 299
7.5质量保证和测量指标 299
7.5.1软件质量 300
7.5.2面向对象测量指标 301
7.6文档化 304
7.6.1开发遗产 304
7.6.2文档化的内容 305
7.7工具 306
7.7.1工具种类 306
7.7.2组织上的意义 307
7.8特殊主题 308
7.8.1领域特定问题 308
7.8.2采纳面向对象技术 309
7.9面向对象开发的好处和风险 310
7.9.1面向对象开发的好处 310
7.9.2面向对象开发的风险 311
7.10小结 313
第3篇 应用 316
第8章 系统架构——基于卫星的导航 316
8.1初始 317
8.1.1卫星导航系统的需求 318
8.1.2定义问题的边界 319
8.1.3确定任务用例 322
8.1.4确定系统用例 325
8.2细化 329
8.2.1开发一个好的架构 329
8.2.2定义架构开发活动 330
8.2.3验证所建议的系统架构 331
8.2.4分配非功能需求和确定接口 339
8.2.5规定系统架构及其部署 341
8.2.6分解系统架构 344
8.3构造 350
8.4交付之后 350
8.4.1添加新的功能 351
8.4.2改变目标硬件 352
第9章 控制系统——交通管理 353
9.1初始 354
9.1.1列车交通管理系统的需求 354
9.1.2决定系统用例 357
9.2细化 362
9.2.1分析系统功能 362
9.2.2定义TTMS架构 366
9.2.3从系统工程到硬件和软件工程 368
9.2.4关键抽象和机制 371
9.3构造 373
9.3.1消息传送 374
9.3.2列车时刻表计划 377
9.3.3显示信息 381
9.3.4传感器数据采集 382
9.3.5发布版本管理 383
9.3.6系统架构 384
9.3.7子系统规格说明 385
94交付之后 387
第10章 人工智能——密码分析 389
10.1初始 390
10.1.1密码分析需求 390
10.1.2定义问题的边界 391
10.1.3黑板框架的架构 394
10.1.4知识源的分析 396
10.2细化 397
10.2.1黑板对象 397
10.2.2依赖和认定 399
10.3构造 401
10.3.1设计黑板对象 402
10.3.2设计知识源 407
10.3.3设计控制器 414
10.3.4集成黑板框架 416
10.3.5添加新的知识源 419
10.4交付之后 421
10.4.1系统增强 421
10.4.2改变需求 423
第11章 数据采集——气象监测站 424
11.1初始 424
11.1.1气象监测站需求 425
11.1.2定义问题的边界 425
11.1.3场景 437
11.2细化 438
11.2.1气象监测系统用例 438
11.2.2架构框架 448
11.3构造 450
11.3.1帧机制 450
11.3.2发布计划 454
11.3.3传感器机制 455
11.3.4显示机制 457
11.3.5用户界面机制 458
11.4交付之后 461
第12章Web应用——休假跟踪系统 463
12.1初始 464
12.1.1需求 464
12.1.2用例模型 466
12.2细化 467
12.2.1部署视图 468
12.2.2逻辑视图 470
12.2.3进程视图 472
12.2.4实现视图 475
12.2.5用例视图 475
12.3构造 480
12.3.1用户体验模型 480
12.3.2分析和设计模型 482
12.3.3实体 493
12.3.4控制器 502
12.3.5 Web页面和用户界面 503
12.4交付和交付之后 508
附录A面向对象编程语言 510
附录B进一步阅读 530
注解 539
术语表 566