本书全面介绍使用UML进行软件设计、分析与开发的知识。UML适合于以体系结构为中心、用例驱动、迭代式和渐增式的软件开发过程,其应用领域非常广泛。本书内容包括面向对象的分析方法和设计方法,面向对象分析的三层设计,用例图、类图、对象图和包图、活动图、顺序图和协作图、状态图、构造组件图和部署图等,UML核心语义以及扩展机制的三个重要组成部分:构造型、标记值和约束,使用与UML紧密结合的RUP进行软件开发,对象约束语言,UML在Web应用程序中的应用,使用C++语言实现UML模型(重点介绍类图模型的实现)的基本原理和方法。
本书适合作为普通高校计算机专业教材,也可以作为软件设计人员和开发人员的参考资料。
20世纪90年代,人们推出了许多不同的面向对象设计和分析方法。这些不同的面向对象的方法具有不同的建模符号体系,这些不同的符号体系极大地妨碍了软件的设计人员、开发人员和用户之间的交流。因此,有必要在分析、比较不同的建模语言以及总结面向对象技术应用实践的基础上,建立一个标准的、统一的建模语言。UML就是这样的建模语言,UML在1997年11月17日被对象管理组织OMG采纳成为基于面向对象技术的标准建模语言。统一建模语言UML不仅统一了面向对象方法中的符号表示,而且在其基础上进一步发展,并最终被统一为被人们所接受的标准。
UML相当适合于以体系结构为中心的、用例驱动的、迭代式和渐增式的软件开发过程,其应用领域颇为广泛,除了可用于具有实时性要求软件系统建模以及处理复杂数据的信息系统建模外,还可用于描述非软件领域的系统。
UML适用于系统开发过程中从需求分析到完成测试的各个阶段:在需求分析阶段,可以用用户模型视图来捕获用户需求;在分析和设计阶段,可以用静态结构和行为模型视图来描述系统的静态结构和动态行为;在实现阶段,可以将UML模型自动转换为用面向对象程序设计语言实现代码。
本书以渐进的顺序来介绍UML,从需求分析开始,然后再构建和部署系统。
第1章 主要介绍什么是面向对象的分析方法和设计方法,面向对象分析的三层设计;然后介绍面向对象分析的工具和方法——UML,以及UML的主要构成。
第2章 主要介绍什么是用例图,用例图的组成,以及如何使用用例图对系统进行需求分析。
第3章 介绍类图、对象图和包图的基本概念,重点介绍了类与类之间的关系以及如何建模类图。
第4章 主要介绍活动图的相关知识和活动图在UML建模中发挥的作用,并辅以图书馆管理系统活动图实例。
第5章 介绍系统交互之一的顺序图,其中主要介绍系统顺序图的作用,以及顺序图的组成。UML2.0在UML1.x的基础上,为管理复杂交互添加了顺序片段部分。
第6章 主要介绍通信图,通信图也是描述系统交互的动态视图,其在UML1.x中称为协作图,在本章介绍了构成通信图的主要部件,以及如何实现通信图与顺序图之间的转换。
第7章 本章主要介绍UML2.0新增的交互视图——时序图。当正在建模的系统对时间有需求时,就需要使用时序图对其进行交互建模。
第8章 本章主要介绍交互概况图和组合结构图,交互概况图将顺序图、通信图和时序图组合在一起,使用各种类型的交互图的特长为用例进行建模。组合结构图则从另一个方面描述了类之间的组成结构。
第9章 主要介绍了状态图的基础知识,并着重介绍状态图中的重要元素,最后给出了图书馆管理系统中用到的状态图。
第10章 介绍如何构造组件图和部署图。
第11章 介绍如何通过与UML紧密结合的RUP进行软件开发,重点介绍了RUP的二维空间和RUP的核心工作流程。
第12章 介绍如何根据UML模型进行数据库设计。
第13章 本章由浅入深地介绍了对象约束语言,包括对象约束语言的结构、语法、集合的使用和OCL标准库等。
第14章 本章从UML四层体系结构入手,详细介绍了UML核心语义及扩展机制的三个重要组成部分:构造型、标记值和约束。
第15章 介绍用C++语言实现UML模型(重点介绍类图模型的实现)的基本原理和方法。
第16章 介绍使用UML分析一个比较完整的案例——图书管理系统,这一章是对前面基础部分的总结,展示了如何使用UML为系统建模。
第17章 主要介绍嵌入式系统的分析,以及嵌入式系统的技术特点和开发过程,并通过一个案例——MP3播放器,介绍UML在嵌入式系统中的应用。
第18章 主要介绍UML在Web应用程序中的应用,通过本章的介绍,将使读者对Web应用程序的开发有一个全新的认识。
本书特色
本书是一本完整介绍UML在软件设计和开发过程中应用的教程,在编写过程中我们精心设计了丰富的体例,以帮助读者顺利学习本书内容。
? 理论紧密结合实践 全书提供了3个完整的分析案例,通过示例分析、设计过程讲解UML的应用知识。
? 图文并茂 UML理论知识比较抽象,本书绘制了大量UML图,帮助读者直观理解抽象内容。
? 网站互动 我们在网站上提供了本书案例和扩展内容的资料链接,便于读者继续学习相关知识;授课教师也可以下载本书教学课件和其他教学资源。
? 思考与练习 简答题测试读者对各章内容的掌握程度;分析题理论结合实际,引导读者深入掌握UML理论知识。
读者对象
本书在多家院校成熟教案以及自编教材的基础上整合编写,全面介绍使用UML进行软件设计、分析与开发的知识,适合作为普通高校计算机专业教材,也可以作为软件设计人员和开发人员的参考资料。
本书作者均从事软件分析、开发和教学工作,拥有丰富的UML开发案例。参与本书编写人员除了封面署名人员之外,还有吴俊海、张瑞萍、董志鹏、祝红涛、王海峰、郝相林、刘万军、杨宁宁、郭晓俊、康显丽、辛爱军、牛小平、贾栓稳、王立新、苏静、赵元庆、王蕾、亢凤林、韦潜、郝安林等人。由于时间仓促,书中错误在所难免,敬请读者批评指正。读者可以通过清华大学出版社网站www.tup.tsinghua.edu.cn与我们联系。
编 者
第1章 UML与面向对象1
1.1 面向对象开发2
1.1.1 理解面向对象开发2
1.1.2 面向对象的主要概念5
1.1.3 OO开发的优点8
1.2 OO开发中的三层设计8
1.3 UML简介9
1.3.1 为什么对系统建模9
1.3.2 UML的发展10
1.3.3 UML的构成10
1.3.4 “统一”的意义11
1.4 UML视图11
1.5 UML图13
1.6 模型元素15
1.6.1 事物15
1.6.2 关系17
1.7 通用机制18
1.8 使用UML建模19
1.9 思考与练习20
第2章 用例图21
2.1 用例图的构成21
2.1.1 系统22
2.1.2 参与者22
2.1.3 用例24
2.1.4 关系26
2.2 泛化27
2.2.1 泛化用例27
2.2.2 泛化参与者29
2.3 描述用例30
2.4 用例之间的关系33
2.4.1 包含关系33
2.4.2 扩展关系34
2.5 用例建模36
2.5.1 确定系统涉及的总体信息36
2.5.2 确定系统的参与者36
2.5.3 确定用例与构造用例模型37
2.6 思考与练习40
第3章 类图、对象图和包图41
3.1 类图41
3.1.1 概述41
3.1.2 类及类的表示42
3.1.3 定义类47
3.2 关联关系47
3.2.1 二元关联48
3.2.2 关联类53
3.2.3 或关联与反身关联54
3.2.4 聚合55
3.2.5 组成55
3.3 泛化关系56
3.3.1 泛化的含义和用途56
3.3.2 泛化的层次与多重继承57
3.3.3 泛化约束58
3.4 依赖关系和实现关系59
3.5 构造类图模型61
3.6 抽象类63
3.7 接口64
3.8 对象图65
3.8.1 对象和链65
3.8.2 使用对象图建模66
3.9 包图67
3.9.1 理解包图67
3.9.2 导入包68
3.9.3 使用包图建模70
3.10 思考与练习70
第4章 活动图72
4.1 定义活动图72
4.2 认识活动图标记符73
4.2.1 活动74
4.2.2 状态75
4.2.3 转移75
4.2.4 控制点76
4.2.5 判断节点与合并节点77
4.2.6 综合应用79
4.3 其他标记符79
4.3.1 事件和触发器79
4.3.2 分叉和汇合80
4.3.3 泳道81
4.3.4 对象流82
4.4 建造活动图模型83
4.4.1 建模活动图步骤83
4.4.2 标识用例84
4.4.3 建模主路径84
4.4.4 建模从路径85
4.4.5 添加泳道86
4.4.6 改进高层活动87
4.5 思考与练习87
第5章 顺序图89
5.1 定义顺序图89
5.2 顺序图的组成90
5.2.1 对象与生命线90
5.2.2 消息91
5.2.3 激活94
5.3 创建对象和分支、从属流95
5.3.1 创建对象95
5.3.2 分支和从属流96
5.4 建模时间97
5.5 建模迭代98
5.6 消息中的参数和序号99
5.7 管理复杂交互的顺序图片段100
5.8 创建顺序图模型101
5.8.1 确定用例与工作流101
5.8.2 布置对象与添加消息101
5.9 思考与练习104
第6章 通信图105
6.1 通信图的构成105
6.1.1 对象和类角色105
6.1.2 关联角色106
6.1.3 通信链接107
6.1.4 消息107
6.2 对消息使用序列号和控制点108
6.3 在通信图中创建对象109
6.4 迭代110
6.5 顺序图与通信图110
6.6 思考与练习112
第7章 时序图113
7.1 时序图构成113
7.1.1 时序图中的对象113
7.1.2 状态115
7.1.3 时间115
7.1.4 状态线116
7.1.5 事件与消息116
7.2 时间约束117
7.3 时序图的替代表示法118
7.4 思考与练习119
第8章 交互概况图和组合结构图120
8.1 交互概况图的组成120
8.2 为用例建模交互概况图121
8.2.1 交互122
8.2.2 组合交互124
8.3 组合结构图125
8.3.1 内部结构125
8.3.2 使用类127
8.3.3 合作128
8.4 思考与练习129
第9章 状态机图130
9.1 定义状态机图130
9.1.1 状态机130
9.1.2 对象、状态和事件131
9.1.3 状态机图131
9.2 认识状态机图中的标记符132
9.2.1 状态132
9.2.2 转移132
9.2.3 决策点135
9.2.4 同步135
9.3 指定状态机图中的动作和事件136
9.3.1 事件136
9.3.2 动作138
9.4 组成状态141
9.4.1 顺序子状态141
9.4.2 并发子状态142
9.4.3 子状态机引用状态143
9.4.4 同步状态144
9.4.5 历史状态145
9.5 建造状态机图模型146
9.5.1 分析状态机图146
9.5.2 完成状态机图146
9.6 思考与练习147
第10章 构造实现方式图148
10.1 组件图概述148
10.2 组件及其表示149
10.3 接口和组件间的关系149
10.4 组件图的应用150
10.5 部署图151
10.5.1 节点152
10.5.2 关联关系153
10.5.3 部署图的应用153
10.6 组合组件图和部署图155
10.7 建模实现方式图156
10.7.1 添加节点和关联关系156
10.7.2 添加组件、类和对象157
10.7.3 添加依赖关系157
10.7.4 图书管理系统的实现
方式图158
10.8 思考与练习160
第11章 UML与RUP162
11.1 理解软件开发过程162
11.2 Rational统一过程(RUP)163
11.2.1 理解RUP163
11.2.2 为什么要使用RUP164
11.3 RUP的二维空间165
11.3.1 时间维165
11.3.2 RUP的静态结构167
11.4 核心工作流程169
11.4.1 需求获取工作流169
11.4.2 分析工作流172
11.4.3 设计工作流174
11.4.4 实现工作流176
11.4.5 测试工作流179
11.5 思考与练习182
第12章 UML与数据库设计183
12.1 数据库结构183
12.2 数据库接口183
12.3 数据库结构转换184
12.3.1 类到表的转换184
12.3.2 关联关系的转换186
12.4 完整性与约束验证188
12.4.1 父表的约束188
12.4.2 子表的约束191
12.5 关于存储过程和触发器191
12.6 铁路系统UML模型到
数据库的转换192
12.7 用SQL语句实现数据库功能194
12.8 思考与练习195
第13章 对象约束语言197
13.1 OCL概述197
13.2 OCL结构198
13.2.1 抽象语法198
13.2.2 具体语法198
13.3 OCL表达式199
13.4 OCL语法200
13.4.1 固化类型200
13.4.2 数据类型、运算符和
操作201
13.5 深入固化类型202
13.5.1 属性约束建模202
13.5.2 对操作约束建模203
13.6 使用集合204
13.6.1 创建集合204
13.6.2 操作集合205
13.7 使用消息206
13.8 元组208
13.9 OCL标准库209
13.9.1 OclVoid和OclAny
类型209
13.9.2 OclMessage类型210
13.9.3 集合类型210
13.9.4 模型元素类型215
13.9.5 基本类型216
13.10 思考与练习218
第14章 UML扩展机制220
14.1 UML的体系结构220
14.1.1 四层体系结构220
14.1.2 元元模型层222
14.1.3 元模型层223
14.2 UML核心语义224
14.3 构造型226
14.3.1 表示构造型226
14.3.2 UML标准构造型226
14.3.3 数据建模229
14.3.4 Web建模和业务
建模扩展230
14.4 标记值231
14.4.1 表示标记值231
14.4.2 标记值应用元素231
14.4.3 自定义标记值232
14.4.4 UML标准标记值233
14.5 约束233
14.5.1 表示约束233
14.5.2 UML标准约束234
14.5.3 自定义约束236
14.6 思考与练习236
第15章 UML模型的实现237
15.1 类的实现237
15.2 关联关系的实现239
15.2.1 一般关联的实现240
15.2.2 有序关联的实现244
15.2.3 关联类的实现244
15.2.4 受限关联的实现246
15.3 聚合与组合关系的实现249
15.4 泛化关系的实现250
15.5 接口类和包的实现251
15.6 思考与练习252
第16章 图书管理系统的
分析与设计256
16.1 系统需求256
16.2 需求分析257
16.2.1 识别参与者和用例257
16.2.2 用例描述259
16.3 静态结构模型262
16.3.1 定义系统中的
对象和类262
16.3.2 定义用户界面类266
16.3.3 类之间的关系269
16.4 动态行为模型271
16.4.1 建立顺序图271
16.4.2 建立状态图280
16.5 物理模型281
第17章 嵌入式系统设计283
17.1 嵌入式系统的技术特点283
17.2 嵌入式系统的开发技术285
17.2.1 嵌入式系统开发过程285
17.2.2 软件移植286
17.3 嵌入式系统的需求分析286
17.3.1 MP3播放器的
工作原理287
17.3.2 外部事件287
17.3.3 识别用例289
17.3.4 使用顺序图描述用例290
17.4 系统的静态模型293
17.4.1 识别系统中的
对象或类293
17.4.2 绘制类图294
17.5 系统的动态模型298
17.5.1 状态图298
17.5.2 协作图300
17.6 体系结构302
第18章 Web应用程序设计303
18.1 Web应用程序的结构303
18.1.1 瘦客户模式304
18.1.2 胖客户模式306
18.1.3 Web传输模式307
18.1.4 程序结构模式对
程序的影响307
18.2 Web应用系统的UML
建模方法308
18.3 UML在学生成绩管理系统
建模中的运用311
18.3.1 系统需求分析311
18.3.2 系统设计311
18.4 系统详细设计318
18.5 系统部署320