序言 1
第1章 引言 1
1.1 面向对象的概念 1
前言页 1
1.1.1 对象的特性 2
1.2 面向对象开发的概念 4
1.2.1 面向对象的思维 4
1.2.2 面向对象方法学 4
1.2.3 三种模型 6
1.2.4 功能方法学上的差异 6
1.3 面向对象技术要点 6
1.3.1 抽象 7
1.3.2 封装 7
1.3.4 共享 8
1.3.5 重点在对象结构,不是在过程结构 8
1.3.3 数据和行为的联合 8
1.3.6 协同作用 9
1.4 面向对象开发的可用性例证 9
1.5 面向对象方法的要点和主要优点 10
1.6 本书组织 11
练习 12
第一部分 建模概念 17
第2章 一种设计技术的建模 17
2.1 建模 17
2.1.1 使用模型的目的 17
2.1.2 抽象 18
2.2 对象模型技术 18
2.2.1 对象模型 19
2.2.2 动态模型 19
2.2.3 功能模型 19
练习 20
2.2.4 三种模型的联系 20
2.3 小结 20
第3章 对象模型 23
3.1 对象和类 23
3.1.1 对象 23
3.1.2 类 24
3.1.3 对象图 24
3.1.4 属性 25
3.1.5 操作和方法 26
3.1.6 对象类的表示小结 27
3.1.7 对象和类的OMT表示的改进 27
3.1.8 改进的对象和类的表示小结 29
3.2 链接和关联 30
3.2.1 一般概念 30
3.2.2 重数 32
3.3.1 链接属性 33
3.2.3 关联的重要性 33
3.3 高级链接和关联概念 33
3.3.2 用关联模型化为类 35
3.3.3 角色名 35
3.3.4 排序 36
3.3.5 资格符 36
3.3.6 聚合 37
3.4 概括和继承 38
3.4.1 一般概念 38
3.4.2 概括的使用 40
3.4.3 重写特征 40
3.5 构造分组 40
3.5.1 模块 40
3.6 对象模型的一个实例 41
3.5.2 表 41
3.7 OMT对象模型在链接和关联方面的改进 43
3.8 实践的技巧 45
3.9 小结 46
练习 47
第4章 高级对象模型 55
4.1 对象和类的概念 55
4.1.1 例化 55
4.1.2 类属性和操作 55
4.1.3 属性的重数 56
4.1.4 类的候选关键字 56
4.1.5 域 57
4.1.6 数据的辅助特征 58
4.2 链接和关联的概念 59
4.2.1 重数 59
4.2.3 关联的候选关键字 60
4.2.2 三元关联 60
4.2.4 异或关联 61
4.2.5 资格关联 61
4.3 聚合 62
4.3.1 聚合与关联 62
4.3.2 聚合与概括 63
4.3.3 递归聚合 63
4.3.4 操作的传播 64
4.3.5 物理聚合与分类聚合 65
4.3.6 物理聚合的语义扩展 66
4.3.7 分类聚合的语义扩展 66
4.4 概括 67
4.4.1 抽象类和具体类 67
4.4.2 概括与其他对象建模结构 67
4.5.2 无公共祖先的多重继承 69
4.5 多重继承 69
4.5.1 有不同鉴别器的多重继承 69
4.5.3 多重继承的工作环境 70
4.6 包 72
4.6.1 水平逻辑 73
4.6.2 包的实例 74
4.7 导出数据和约束 76
4.8 对象元模型 78
4.8.1 元数据和元模型 78
4.8.2 框架 82
4.8.3 模式 83
4.9 高级实践技巧 87
4.10 小结 88
练习 89
5.1 事件和状态 95
第5章 动态模型 95
5.1.1 事件 96
5.1.2 脚本和事件轨迹 97
5.1.3 状态 98
5.1.4 状态图 99
5.1.5 条件 100
5.2 操作 101
5.2.1 控制操作 101
5.2.2 操作的状态图小结 102
5.3 嵌套状态图 103
5.3.1 平状态图问题 103
5.3.2 嵌套状态图 103
5.3.3 状态概括 104
5.3.4 事件概括 105
5.4.1 聚合并发性 106
5.4 并发性 106
5.4.2 对象内部并发性 107
5.5 高级动态模型概念 107
5.5.1 进入和退出动作 107
5.5.2 内部动作 108
5.5.3 自动变迁 109
5.5.4 发送事件 109
5.5.5 并发活动的同步 110
5.6 动态模型的实例 111
5.7 对象模型和动态模型的关系 115
5.8 实践技巧 116
5.9 小结 116
练习 117
6.1 功能模型 123
第6章 功能模型 123
6.2 数据流图 124
6.2.1 处理 125
6.2.2 数据流 125
6.2.3 施动者 126
6.2.4 数据存储 126
6.2.5 嵌套数据流图 128
6.2.6 控制流 128
6.3 指定的操作 129
6.4 约束 131
6.5 数据库应用中的功能模型 131
6.5.1 伪码 132
6.5.2 ONN的伪码 133
6.5.3 ONN的构造 133
6.5.4 组合ONN构造 140
6.5.5 添加ONN特性 141
6.5.6 其他范型 143
6.5.7 实践技巧 145
6.6 功能模型的实例(飞行模拟机装置) 146
6.7 功能模型与对象模型和动态模型的关系 149
6.8 小结 150
练习 151
第二部分 设计方法学 157
第7章 方法学简介 157
7.1 OMT是一种软件工程方法学 157
7.2 OMT方法学 158
7.3 面向对象方法的深远影响 159
7.4 小结 159
练习 160
第8章 分析 161
8.1 分析综述 161
8.2 需求陈述 162
8.3 自动取款机例子 163
8.4 建立对象模型 164
8.4.1 找出对象类 165
8.4.2 筛选出正确的对象类 166
8.4.3 准备数据字典 168
8.4.4 确定关联 169
8.4.5 划分主题 172
8.4.6 确定属性 173
8.4.7 用继承性改进对象模型 175
8.4.8 反复修改对象模型 176
8.5 动态模型 177
8.5.1 编写脚本 178
8.5.2 用户界面 179
8.5.3 画事件轨迹图 179
8.5.4 画状态图 180
8.5.5 审查动态模型 183
8.6 功能模型 184
8.6.1 找出输入和输出值 184
8.6.2 建立数据流图 184
8.6.3 描述功能 186
8.6.4 找出对象之间的约束 186
8.6.5 指定优化规则 187
8.7 定义服务 187
8.7.1 常规行为 187
8.7.2 从事件导出的操作 187
8.7.3 与数据流图中处理框对应的操作 187
8.7.4 利用继承减少冗余操作 188
8.8 小结 188
练习 189
9.1 系统设计综述 197
第9章 系统设计 197
9.2 将系统划分为子系统 198
9.2.1 分层 199
9.2.2 分块 199
9.2.3 系统拓扑 200
9.3 识别并发性 200
9.3.1 识别固有并发性 200
9.3.2 定义并发任务 201
9.4 给子系统分配处理器和任务 201
9.4.1 估计硬件资源需求 201
9.4.2 硬件与软件之间的折衷 201
9.4.3 为任务指定处理器 202
9.4.4 确定物理连接 202
9.5 数据存储管理 203
9.5.1 使用数据库的优点 203
9.6 处理全局资源 204
9.5.2 使用数据库的缺点 204
9.7 选择软件控制实现 205
9.7.1 过程驱动系统 205
9.7.2 事件驱动系统 205
9.7.3 并发系统 206
9.7.4 内部控制 206
9.7.5 其他范型 206
9.8 处理边界条件 207
9.9 设置折衷的优先权 207
9.10 公共的体系结构框架 208
9.10.1 批处理变换 208
9.10.2 连续变换 209
9.10.3 交互式接口 210
9.10.5 实时系统 211
9.10.6 事务处理管理 211
9.10.4 动态模拟 211
9.11 ATM系统的结构 212
9.12 小结 213
练习 214
13.1 用程序设计语言实现 216
第10章 对象设计 220
10.1 对象设计综述 220
10.1.1 从分析和系统结构着手 220
10.1.2 对象设计的步骤 221
10.1.3 对象模型工具 221
10.2 组合三种模型 222
10.3 设计算法 223
10.3.1 选择算法 223
10.3.2 选择数据结构 225
10.3.3 定义内部类和操作 225
10.3.4 指定操作的职责 225
10.4 设计优化 226
10.4.1 添加冗余关联获取有效访问 226
10.4.2 重新安排执行次序以获得效率 228
10.4.3 保存导出属性避免重复计算 228
10.5 控制实现 229
10.5.1 在程序内进行状态设置 229
10.5.2 状态机器引擎 231
10.5.3 控制作为并发任务 231
16.6 继承的调整 231
10.6.1 重新安排类和操作 231
10.6.2 抽象出公共的行为 232
10.6.3 使用授权共享实现 233
10.7.1 分析关联遍历 234
10.7.2 单向关联 234
10.7 关联设计 234
10.7.3 双向关联 235
10.7.4 链接属性 235
10.8 对象的表示 236
10.9 物理打包 236
10.9.1 信息隐藏 237
10.9.2 实体的相关性 237
15.4.3 Smalltalk中的调用操作 238
10.9.3 构造模块 238
10.10 设计决策文档 238
10.11 小结 239
练习 240
第11章 方法学总结 245
11.1 分析 245
11.2 系统设计 246
11.3 对象设计 247
11.4 小结 248
练习 248
12.1 结构化分析/结构化设计(SA/SD) 250
第12章 方法学比较 250
12.1.1 SA/SD方法概述 250
12.1.2 与OMT方法学的比较 251
12.2 Jackson结构化开发方法 252
12.2.1 JSD方法概述 252
12.2.2 与OMT方法学的比较 253
12.3 信息建模的表示法 254
12.4 小结 256
练习 256
第13章 从设计到实现 261
第三部分 实现 261
13.2 用数据库系统实现 262
13.3 计算机的外部实现 263
13.4 第三部分概述 263
14.2 可重用性 264
14.1 面向对象程序设计风格 264
第14章 程序设计风格 264
14.2.1 可重用的类型 265
14.2.2 可重用准则 265
14.2.3 使用继承机制 266
14.3 提高可扩充性 267
14.4 提高健壮性 268
14.5 小结 268
练习 269
第15章 面向对象语言 273
15.1 把设计转换成实现 273
15.2 类定义 275
15.2.1 C?中的类定义 275
15.2.2 Eiffel中的类定义 276
15.2.3 Smalltalk中的类定义 277
15.3.1 C?中创建对象 278
15.3 创建对象 278
15.3.2 Eiffel中创建对象 280
15.3.3 Smalltalk中创建对象 280
15.4 调用操作 281
15.4.1 C?中的调用操作 281
15.4.2 Eiffel中的调用操作 282
15.5 使用继承机制 284
15.5.1 C?中使用继承 284
15.5.2 Eiffel中使用继承 286
15.5.3 Smalltalk中使用继承 287
15.6 实现关联 288
15.6.1 C?中实现的关联 289
15.6.2 Eeffel中实现的关联 292
15.6.3 Smalltalk中实现的关联 293
15.7 面向对象语言的特性 294
15.7.1 多重继承 295
15.7.2 类库 295
15.7.3 效率问题 295
15.7.4 强类型与弱类型 296
15.7.5 内存管理 296
15.7.6 封装 297
15.7.7 打包 298
15.7.8 开发环境 298
15.7.9 元数据 298
15.7.10 参数化类 299
15.7.11 断言和约束 299
15.7.12 数据的持久性 299
15.8.1 Smalltalk 300
15.8 面向对象语言的综述 300
15.8.2 C? 301
15.8.3 Eiffel 302
15.8.4 CLOS 302
15.8.5 面向对象数据库程序设计语言 303
15.8.6 面向对象语言比较 304
15.9 小结 305
练习 306
第16章 非面向对象语言 309
16.1 映像面向对象的概念 309
16.1.3 在Ada语言中的实现 310
16.1.4 在Fortran语言中的实现 310
16.1.5 其他语言 310
16.1.2 在C语言中的实现 310
16.1.1 图形编辑器的例子 310
16.2 把类转换成数据结构 311
16.2.1 把类转换成C结构说明 311
16.2.2 把类转换成Ada记录定义 311
16.2.3 把类转换成Fortran的数组 312
16.3.3 在Fortran中传送参数 313
16.3.2 在Ada中传送参数 313
16.3.1 在C中传送参数 313
16.3 传送参数到方法 313
16.4 分配对象 314
16.4.1 在C中分配对象 314
16.4.2 在Ada中分配对象 315
16.4.3 在Fortran中分配对象 315
16.5 实现继承 316
16.5.1 在C中实现继承 316
16.5.2 在Ada中实现继承 317
16.5.3 在Fortran中实现继承 318
16.6 实现方法分解 319
16.6.1 在C中的方法分解 320
16.6.2 在Ada中的方法分解 323
16.6.3 在Fortran中的方法分解 323
16.7 实现关联 324
16.7.1 在C中实现关联 325
16.7.2 在Ada中实现关联 326
16.7.3 在Fortran中实现关联 326
16.8 处理并发 327
16.9 封装 328
16.9.1 在C中的封装 328
16.9.2 在Ada中的封装 328
16.10 你得到了什么 330
16.11 小结 330
16.9.3 在Fortran中的封装 330
练习 331
第17章 关系数据库 333
17.1 一般的DBMS概念 333
17.2 关系DBMS概念 335
17.2.1 RDBMS逻辑数据结构 335
17.2.2 RDBMS操作符 336
17.2.3 RDBMS完整性 336
17.2.4 范式 337
17.2.5 视图 339
17.3 关系数据库设计 339
17.3.1 为对象模型扩充三级模式体系结构 339
17.3.2 对象ID的使用 340
17.3.3 将对象类映像到表格 341
17.3.4 将二元关联映像到表格 342
17.3.5 将三元关联映像到表格 345
17.3.6 将概括映像到表格 346
17.3.7 对象械型映像到表格的规则小结 349
17.3.8 映像对象模型到表格的其他方法 350
17.4 高级关系DBMS 350
17.5 小结 351
练习 352
第四部分 应用 357
第18章 对象图编译 357
18.1 问题叙述 358
18.1.1 编译输入 358
18.1.2 编译输出 359
18.1.3 多方面需求 360
18.2.1 分析图形编辑器语言 361
18.2.2 几何对象模型 361
18.2 分析 361
18.2.3 抽取连接 362
18.2.4 连接对象模型 362
18.2.5 抽象BOM实体 364
18.2.6 内部元对象模型 364
18.2.7 产生数据库命令 365
18.3 系统设计 365
18.4 对象设计 366
18.4.1 功能模型 366
18.4.2 中间对象模型 366
18.4.3 连接算法 367
18.5 实现 368
18.6 经验点滴 369
18.7 小结 369
练习 370
19.1 背景 372
第19章 计算机动画 372
19.2 问题叙述 374
19.3 分析 375
19.3.1 对象模型 375
19.3.2 动态模型 377
19.3.3 功能模型 378
19.4 系统设计 378
19.4.1 子系统 378
19.4.2 一致性和控制 379
19.4.3 数据格式 379
19.4.4 折衷 379
19.5 对象设计 380
19.5.1 演体 380
19.5.2 提示 380
19.5.3 场景 380
19.5.4 渲染 381
19.6 实现 382
19.7 经验点滴 384
19.8 小结 384
练习 385
第20章 电力分布式设计系统 386
20.1 背景 386
20.2 问题叙述 387
20.2.1 功能需求 387
20.2.2 体系结构要求 388
20.3 分析 389
20.3.1 对象模型 389
20.3.2 动态模型 392
20.3.3 功能模型 393
20.4 系统设计 395
20.5.1 状态树控制 396
20.5 对象设计 396
20.5.3 辅助树 397
20.5.4 低层操作 397
20.5.2 主树 397
20.6 实现 398
20.7 小结 398
练习 399
第21章 逆向工程 402
21.1 概述 402
21.1.1 再造工程 402
21.1.2 数据库逆向工程的原动力 403
21.2 层次数据库 404
21.2.1 概念 404
21.2.2 逆向工程处理 405
21.2.3 例子 407
21.3.1 概念 409
21.3 网状数据库 409
21.3.2 逆向工程处理 410
21.3.3 例子 411
21.4 关系数据库 414
21.4.1 概念 414
21.4.2 逆向工程处理 415
21.4.3 例子 417
21.5 小结 420
练习 420
附录1 民航航班预订系统对象模型图 421
附录2 ONN的BNF语法 422
附录3 对象模型技术OMT图形表示 424
部分练习答案 428
参考文献 450