第1章 面向对象方法概论 1
1.1 什么是面向对象 1
1.2 从认识论看面向对象方法的形成 3
1.2.1 软件开发——对事物的认识和描述 3
1.2.2 语言的鸿沟 4
1.2.3 编程语言的发展使鸿沟变小 4
1.2.4 软件工程学的作用 6
1.2.5 面向对象是软件方法学的返璞归真 11
1.3 面向对象方法的基本概念 12
1.3.1 对象 12
1.3.2 类 13
1.3.3 封装 15
1.3.4 继承 17
1.3.5 聚合 18
1.3.6 关联 19
1.3.7 消息 21
1.3.8 多态性 22
1.3.9 其他 22
1.3.10 术语对照 24
1.4 面向对象方法的历史及现状 26
1.4.1 历史 26
1.4.2 发展到软件生命周期的前期阶段 27
1.4.3 当前的研究及实践领域 30
2.1 什么是OOA 32
2.2 分析面临的主要问题 32
第2章 为什么需要OOA 32
2.3 分析方法综述 36
2.3.1 功能分解法 36
2.3.2 数据流法 37
2.3.3 信息建模法 39
2.3.4 面向对象方法 40
2.3.5 分析方法的比较 40
2.3.6 OOA的主要优点 42
2.4 各种OOA方法 43
2.5 关于统一建模语言UML 45
第3章 本书的OOA方法概貌 47
3.1 引言 47
3.2.1 建模元素及表示法 48
3.2 主要概念及表示法 48
3.2.2 OOA的主要原则 50
3.3 OOA模型及其规约 55
3.3.1 基本模型——类图 55
3.3.2 需求模型——用况图 56
3.3.3 辅助模型——包图、顺序图、活动图及其他 56
3.3.4 模型规约 58
3.3.5 完整的OOA文档及详简程度的控制 58
3.4 OOA过程 60
3.5 OOA与OOD的关系 62
第4章 发现对象、定义对象类 64
4.1 对象和类 64
4.1.1 对象、主动对象以及它们的类 64
4.1.2 类的语义 66
4.1.3 在类的抽象层次上建模 67
4.1.4 如何运用对象和类的概念 69
4.2 表示法 70
4.3 研究问题域和用户需求 71
4.3.1 研究用户需求,明确系统责任 71
4.3.2 研究问题域 72
4.3.3 确定系统边界 73
4.4 发现对象 74
4.4.1 出发点——问题域和系统责任 74
4.4.2 正确地运用抽象原则 74
4.4.3 策略与启发 75
4.4.4 审查和筛选 78
4.4.5 识别主动对象 80
4.5.2 检查和调整 81
4.5 对象分类 81
4.5.1 将对象抽象为类 81
4.5.3 类的命名 82
4.6 建立类图的对象层 83
第5章 定义属性与操作 84
5.1 对象的属性和操作 84
5.2 表示法 86
5.3 定义属性 86
5.3.1 策略与启发 86
5.3.2 审查与筛选 88
5.3.3 推迟到OOD考虑的问题 89
5.4 定义操作 90
5.4.1 行为分类 90
5.3.4 属性的命名和定位 90
5.4.2 策略与启发 91
5.4.3 审查与调整 92
5.4.4 认识对象的主动行为 93
5.4.5 操作过程描述 94
5.4.6 操作的命名和定位 95
5.5 建立类图的特征层 96
5.6 接口的概念及其用途 97
第6章 定义对象间的关系 101
6.1 一般-特殊结构 102
6.1.1 相关概念 102
6.1.2 表示法 104
6.1.3 如何发现一般-特殊结构 105
6.1.4 审查与调整 108
6.1.5 一般-特殊结构的简化 110
6.1.6 多继承及多态性问题 113
6.1.7 调整对象层和特征层 115
6.2 整体-部分结构 116
6.2.1 相关概念 116
6.2.2 表示法 119
6.2.3 如何发现整体-部分结构 120
6.2.4 审查与筛选 121
6.2.5 整体-部分结构的高级应用技巧 122
6.2.5.1 简化对象的定义 122
6.2.5.2 支持软件复用 123
6.2.5.3 表示数量不定的组成部分 124
6.2.5.4 表示动态变化的对象特征 124
6.2.5.5 两种结构之间的变通 127
6.2.6 调整对象层和属性层 129
6.3 关联 129
6.3.1 相关概念 129
6.3.2 表示法及实现技术 131
6.3.2.1 基本表示法 131
6.3.2.2 二元关联的实现 132
6.3.3 运用简单的关联概念解决复杂的关联问题 135
6.3.3.1 带有属性和操作的关联 135
6.3.3.2 三元关联和n元关联 138
6.3.3.3 一个类在关联中多次出现 141
6.3.3.4 关联端点的复杂情况 142
6.3.4 如何建立关联 147
6.3.5 对象层、特征层的增补及关联说明 151
6.4 消息 152
6.4.1 什么是消息 152
6.4.1.1 顺序系统中的消息 152
6.4.1.2 并发系统中的消息 153
6.4.1.3 消息对OOA的意义 157
6.4.2 消息的表示法 157
6.4.3 如何建立消息 163
6.4.4 消息的规约 166
6.5 关于依赖关系的讨论 166
6.5.1 什么是依赖 166
6.5.2 依赖的定义和表示法中的若干问题 169
6.5.3 依赖对面向对象建模的作用 172
7.1 需求分析和系统分析 175
第7章 建立需求模型 175
7.2 基于用况的需求分析基本思路 176
7.3 系统边界与参与者 176
7.3.1 什么是系统边界 177
7.3.2 什么是参与者 178
7.3.3 系统边界与参与者对OOA的意义 180
7.3.4 如何发现参与者 180
7.4 用况 182
7.4.1 什么是用况 182
7.4.2 用况对OOA的意义 184
7.4.3 表示形式和例子 185
7.4.4 如何定义用况 188
7.5.1 用况图中的主要模型元素及表示法 189
7.5 用况图 189
7.5.2 关于用况图的若干问题讨论 190
7.6 开发过程和文档组织 193
7.6.1 开发过程小结 193
7.6.2 文档组织 194
7.6.3 几条建议 195
第8章 建立辅助模型 197
8.1 类图和其他模型图之间的关系 197
8.2 包图 200
8.2.1 包的概念、用途及表示法 200
8.2.2 包之间的关系及表示法 201
8.2.3 如何建立包图 204
8.2.3.1 将模型元素打包 204
8.2.3.2 包的命名 207
8.2.3.3 组织嵌套的包 208
8.2.3.4 减少包的嵌套层次 209
8.2.3.5 建立包之间的关系 209
8.2.4 用包图控制对系统模型的视野 211
8.3 顺序图 212
8.3.1 顺序图及其用途 212
8.3.2 主要概念及表示法 213
8.3.3 顺序图的组织机制与复用 217
8.3.4 关于顺序图的若干问题讨论 219
8.3.5 如何建立顺序图 222
8.4 活动图 225
8.4.1 活动图及其用途 225
8.4.2 主要概念及表示法 226
8.4.3 一个活动图的例子 230
8.4.4 关于活动图的若干问题讨论 231
8.4.5 如何使用活动图 234
8.5 UML的其他几种模型图 237
8.5.1 对象图 237
8.5.2 组合结构图 238
8.5.3 通信图 239
8.5.4 交互概览图 241
8.5.5 定时图 243
8.5.6 状态机图 245
8.5.7 构件图 256
8.5.8 部署图 262
9.1 相关概念及问题讨论 264
9.1.1 术语问题 264
第9章 模型规约 264
9.1.2 规约是给谁看的 265
9.1.3 采用形式语言还是自然语言 266
9.1.4 规约的组织方式问题 266
9.1.5 关于对象约束语言OCL 268
9.2 类的规约 270
9.2.1 目标与措施 270
9.2.2 类规约的内容 272
9.2.3 类规约的组织格式 274
9.3 对其他模型图的规约 276
9.4 模型规约的建立过程 277
10.1 软件复用 279
10.1.1 概述 279
第10章 OOA与软件复用 279
10.1.2 可复用构件 282
10.1.3 构件库 284
10.1.4 软件复用的根本困难 287
10.2 专向领域的复用及领域分析 290
10.2.1 可复用的软件构架 290
10.2.2 领域分析 291
10.2.3 基于构件/构架的软件开发 292
10.3 OOA对软件复用的支持 294
10.3.1 支持软件复用的OO概念与原则 294
10.3.2 支持软件复用的OOA方法 295
10.4 复用技术对OOA的支持 297
索引 302
参考文献 305