编辑推荐
软件的发展至今已经有近60年的历史。面向对象技术开始有深入的研究并广泛地应用也近40年了,已经成为软件开发中分析、设计、实现的主流方法和技术。40年来,在面向对象技术发展的同时,面向对象技术的各种软件设计工具、规范等也获得了较大发展。其中,重要的一个面向对象的建模技术的成果就是统一建模语言(Uniffed Modeling Language,UML)的出现。
本书基于使用广泛、工具齐全的UML 2.0版本,并以Rose 2007为建模工具,对UML建模语言及其系统建模过程进行了详细讲解。内容安排紧凑,案例实用。
内容简介
UML是以面向对象图形的方式来描述任何类型的系统,应用领域非常广泛,其中常用的是建立软件系统的模型。本书以Rose2007为建模工具全面讲解了UML2.0的基本概念和建模方法。
全书分为14章,分别讲解了用例图、类图、对象图、顺序图、通信图、状态机图、活动图、构件图、部署图、包图、组合结构图、定时图和交互概览图等,并介绍了RUP过程开发模型。后安排了4个实战案例,汽车租赁系统、新闻中心管理系统、BBS论坛系统和数码录音机系统,通过这4个案例全面而系统地详解UML建模与设计。
本书面向软件工程师、系统架构师、系统分析员、硬件工程师及其他系统设计人员,同时也适合高等院校和培训学校软件相关专业的师生学习系统建模时参考使用。
作者简介
李波,博士。从事软件工程及其相关工作多年,编写书籍教材多部,包括《JSP网络编程学习笔记》《Android4.x从入门到精通》《UML基础、建模与设计实战》《PowerDesigner15系统分析与建模实战》《Android5从入门到精通》等。
内页插图
目录
第1章 UML概述 1
1.1 什么是UML 1
1.2 UML的发展历程 2
1.3 UML的特点 3
1.4 UML的组成 3
1.4.1 UML中的事物 3
1.4.2 UML中的关系 5
1.4.3 UML的图 6
1.5 UML的视图 12
1.5.1 用例视图 13
1.5.2 逻辑视图 13
1.5.3 并发视图 13
1.5.4 组件视图 13
1.5.5 部署视图 13
1.6 系统开发阶段 14
1.7 小 结 15
1.8 习 题 15
第2章 面向对象技术和建模基础 16
2.1 面向对象的基本概念 16
2.1.1 面向对象方法 17
2.1.2 对象 18
2.1.3 类 19
2.1.4 封装 20
2.1.5 继承 21
2.1.6 多态 22
2.1.7 消息 23
2.2 面向对象开发 24
2.2.1 系统调查和需求分析 24
2.2.2 面向对象分析方法 25
2.2.3 面向对象设计方法 26
2.3 软件建模概述 27
2.3.1 软件建模的概念 27
2.3.2 软件建模的用途 27
2.3.3 软件建模的优点 28
2.4 小 结 28
2.5 习 题 29
第3章 UML建模工具简介 30
3.1 常用UML建模工具 31
3.1.1 Visio 31
3.1.2 PowerDesigner 33
3.1.3 StarUML 34
3.1.4 Rational Rose 34
3.2 IBM Rational Rose Enterprise Edition 2007的安装 37
3.2.1 安装IBM Rational Rose Enterprise Edition 2007 37
3.2.2 插件程序的安装 40
3.3 使用Rational Rose建模 40
3.3.1 Rational Rose可视化环境组成 41
3.3.2 Rose模型、视图与图 42
3.4 Rose建模的基本操作 43
3.4.1 新建Rose模型 44
3.4.2 打开Rose模型 45
3.4.3 创建Rose框图 45
3.5 双向工程 52
3.5.1 正向工程 52
3.5.2 逆向工程 56
3.6 小 结 57
3.7 习 题 58
第4章 用例和用例图 59
4.1 用例和用例图的概念 59
4.1.1 参与者 61
4.1.2 用例 62
4.1.3 用例描述 64
4.2 用例之间的可视化表示 65
4.2.1 包含关系 65
4.2.2 扩展关系 66
4.2.3 泛化关系 67
4.2.4 分组关系 67
4.3 用例图建模技术及应用 67
4.3.1 识别出系统中的角色和用例 68
4.3.2 区分用例优先次序 72
4.3.3 构建用例图模型 73
4.4 超市进销存管理系统用例图模型构建实例 74
4.5 小 结 78
4.6 习 题 78
第5章 类图和对象图 79
5.1 类图和对象图概述 79
5.1.1 类图的概述 79
5.1.2 对象图的概述 82
5.1.3 接口 84
5.1.4 抽象类 84
5.2 类之间的关系 85
5.2.1 依赖关系 85
5.2.2 泛化关系 87
5.2.3 关联关系 87
5.2.4 实现关系 92
5.3 类图的建模技术及应用 93
5.3.1 类图的建立过程 93
5.3.2 类的识别方法 94
5.3.3 类图分析实例 96
5.4 小 结 105
5.5 习 题 106
第6章 顺序图和通信图 107
6.1 顺序图 107
6.1.1 顺序图概述 107
6.1.2 顺序图的组成元素 108
6.1.3 消息的语法格式 116
6.1.4 顺序图的建模技术及应用 117
6.2 通信图 124
6.2.1 通信图概述 124
6.2.2 通信图的基本内容 125
6.2.3 通信图建模技术及应用 128
6.2.4 顺序图与通信图的比较 132
6.3 小 结 133
6.4 习 题 134
第7章 状态机图和活动图 135
7.1 状态机图 135
7.1.1 状态机图概述 135
7.1.2 状态机图的基本元素 137
7.1.3 状态 137
7.1.4 转换 140
7.1.5 状态机图的建模技术及应用 142
7.2 活动图 145
7.2.1 活动图概述 145
7.2.2 活动图的基本元素 146
7.2.3 动作状态 146
7.2.4 活动状态 147
7.2.5 转移 147
7.2.6 分支 147
7.2.7 分叉和汇合 148
7.2.8 泳道 148
7.2.9 对象流 149
7.2.10 活动图的建模技术及应用 150
7.2.11 状态机图和活动图的比较 156
7.3 小 结 156
7.4 习 题 156
第8章 构件图和部署图 158
8.1 构件图 158
8.1.1 构件图概述 158
8.1.2 组件(Component) 160
8.1.3 接口(Interface) 161
8.1.4 关系(Relationship) 162
8.1.5 使用构件图对系统建模及应用 163
8.2 部署图 166
8.2.1 部署图概述 166
8.2.2 节点(Node) 166
8.2.3 组件(Component) 168
8.2.4 关系(Relationship) 169
8.2.5 部署图的系统建模及应用 169
8.3 小 结 173
8.5 习 题 174
第9章 包图、组合结构图、定时图和交互概览图 175
9.1 包 图 175
9.1.1 包图概述 175
9.1.2 包之间的关系 176
9.1.3 包图的建模技术及应用 177
9.2 组合结构图 178
9.2.1 组合结构图概述 178
9.2.2 基本元素 178
9.2.3 组合结构图的建模技术及应用 178
9.3 定时图 179
9.3.1 定时图概述 179
9.3.2 基本元素 179
9.3.3 定时图的建模技术及应用 179
9.4 交互概览图 181
9.4.1 交互概览图概述 181
9.4.2 基本元素 182
9.4.3 交互概览图的建模技术及应用 182
9.5 小 结 185
9.6 习 题 185
第10章 统一软件过程RUP 186
10.1 RUP简介 186
10.1.1 什么是RUP过程 186
10.1.2 RUP的特点 187
10.2 RUP工作流程 189
10.2.1 业务建模 190
10.2.2 需求分析 190
10.2.3 分析与设计 190
10.2.4 实现 190
10.2.5 测试 190
10.2.6 部署 190
10.2.7 配置和变更管理 191
10.2.8 项目管理 191
10.2.9 环境 191
10.2.10 统一软件开发过程RUP裁剪 191
10.3 RUP的十大要素 191
10.3.1 开发前景 191
10.3.2 达成计划 192
10.3.3 标识和减少风险 192
10.3.4 分配和跟踪任务 192
10.3.5 检查商业理由 193
10.3.6 设计组件构架 193
10.3.7 对产品进行增量式的构建和测试 193
10.3.8 验证和评价结果 193
10.3.9 管理和控制变化 193
10.3.10 提供用户支持 194
10.4 Rose在RUP模型中的应用 194
10.4.1 可视化建模 194
10.4.2 Rose介绍 194
10.4.3 Rose建模与RUP 195
10.4.4 Rose建模与RUP应用实例 196
10.5 小 结 199
10.6 习 题 200
第11章 汽车租赁系统 201
11.1 系统需求分析 201
11.1.1 汽车租赁系统的需求分析 201
11.1.2 功能模块图 202
11.2 用例图设计建模 204
11.2.1 汽车租赁系统中的用例图简述 204
11.2.2 与客户有关的用例图 204
11.2.3 与系统维护人员有关的用例图 205
11.2.4 与技术人员有关的用例图 206
11.3 类图设计建模 207
11.4 顺序图 209
11.4.1 汽车租赁系统中的数据流和相应顺序图 209
11.4.2 与客户有关的事件流和顺序图 209
11.4.3 与系统维护人员有关的事件流和顺序图 213
11.4.4 与技术人员有关的事件流和用例图 217
11.5 通信图设计建模 220
11.5.1 汽车租赁系统中的通信图 220
11.5.2 与客户有关的通信图 220
11.5.3 与技术人员有关的通信图 222
11.5.4 与系统维护人员有关的通信图 223
11.6 活动图 225
11.6.1 系统中的活动图 225
11.6.2 与客户有关的活动图 226
11.6.3 与系统维护人员有关的活动图 229
11.6.4 与技术人员有关的活动图 232
11.7 状态机图设计建模 233
11.8 部署图设计建模 235
第12章 新闻中心管理系统 237
12.1 系统需求说明 237
12.1.1 新闻中心管理系统的需求分析 237
12.1.2 新闻中心管理系统的功能模块 238
12.1.3 UML对系统需求分析的支持 240
12.1.4 利用UML模型构造软件体系结构 240
12.2 系统的用例图 241
12.3 系统中的类图 243
12.4 系统的顺序图 246
12.5 系统的通信图 249
12.6 系统状态机图 250
12.7 系统的活动图 252
12.8 系统的配置和实现 253
12.9 系统的部署图 253
12.10 生成Java代码 254
12.11 逆向工程的实现 260
第13章 BBS论坛系统 262
13.1 BBS论坛系统的需求分析 262
13.1.1 系统的功能需求 263
13.1.2 前台功能模块 265
13.1.3 后台功能模块 267
13.2 BBS论坛系统的UML建模 270
13.2.1 BBS论坛系统的用例图 270
13.2.2 BBS论坛系统的顺序图 274
13.2.3 BBS论坛系统的通信图 292
13.2.4 BBS论坛系统的状态机图 300
13.2.5 BBS论坛系统的活动图 301
13.3 BBS论坛系统中的类及相互关系 308
13.3.1 BBS论坛系统中的类 308
13.3.2 类之间的关系图 312
13.4 BBS论坛系统中的配置和部署 313
13.4.1 构件图的建立 313
13.4.2 部署图的建立 313
第14章 数码录音机系统 314
14.1 数码录音机系统的需求分析 314
14.1.1 外部事件 315
14.1.2 数码录音机系统的用例图 317
14.1.3 用例场景 318
14.2 数码录音机系统中的对象和类图 319
14.2.1 数码录音机系统中的对象 319
14.2.2 数码录音机系统中的类图 320
14.3 数码录音机系统的状态图 326
14.4 数码录音机系统的系统架构 328
14.5 数码录音机系统的协作图 330
14.6 数码录音机系统详细设计 333
14.6.1 硬件的对象建模 333
14.6.2 音频压缩算法 333
14.6.3 使用直接内存访问通道 333
14.6.4 硬件资源分配 335
14.6.5 内存分配 335
14.7 数码录音机系统实现 336
14.8 小 结 336
前言/序言
软件的发展至今已经有近60年的历史。面向对象技术开始有深入的研究并广泛地应用也近40年了,已经成为软件开发中分析、设计、实现的主流方法和技术。40年来,在面向对象技术发展的同时,面向对象技术的各种软件设计工具、规范等也获得了较大发展。其中,最重要的一个面向对象的建模技术的成果就是统一建模语言(Uniffed Modeling Language,UML)的出现。
UML的创建首先开始于1994年10月,由Grady Booch、Jim Rumbaugh和Ivar Jacobson共同开发,并于1996年发布了UML版本0.9。随后,公司联合行动,由10多家公司组成UML伙伴组织,共同提出了UML 1.0和1.1,于1997年11月17日,对象管理组织(OMG)开始采纳UML为其标准建模语言。第三阶段的修订是由OMG主导并控制完成了UML 1.2、1.3、1.4和1.5等版本。本世纪开始以来的修订,推出了UML 2.0版本,并最终统一为大众所接受的标准建模语言。到2011年8月,正式发布的版本已经是UML 2.4.1了,目前UML 2.5正在酝酿之中。
本书基于使用最广泛、工具最齐全的UML 2.0版本,并以Rose 2007为建模工具,对UML建模语言及其系统建模过程进行了详细讲解。内容安排紧凑,案例实用。本书由14章组成,讲解的内容划分如下。
第1~3章:着重介绍UML的预备知识,包括面向对象概述、UML概述以及常见的UML建模工具的介绍。
第4~9章:着重介绍UML的各种图,包括用例图、类图、对象图、顺序图、通信图、状态机图、活动图、构件图、部署图、包图、组合结构图、定时图和交互概览图等,介绍了UML图的基本概念、图的组成要素和图的建模技术和创建示例。通过这种方式能够使读者完整而系统地去把握和了解每一种UML图。第9章对UML 2.0新增的几种图进行了介绍。
第10章:着重对统一软件过程RUP进行介绍,并讲解了Rose在RUP模型中的应用。
第11~14章:详细介绍了4个实战案例,汽车租赁系统、新闻中心管理系统、BBS论坛系统和数码录音机系统,其中数码录音机系统是一个实时嵌入式系统,希望对硬件工程师使用UML设计嵌入式系统有启迪作用。通过这4个实战案例的学习,读者可以较为全面而系统地了解和掌握系统建模的过程。
不管您是业务系统的分析人员,还是从事面向对象软件开发的开发人员,或者是做嵌入式系统设计的硬件工程师,或者是希望通过学习UML帮助自己进行系统建模的人员,本书都能够帮助您全面了解UML的基本概念和建模方法。本书同样也适合作为高等院校和培训学校计算机相关专业师生的教学用书或参考用书。
本书由李波、史江萍、杨弘平、吕海华和代钦等编写,李波对全书进行了规划和整理。第1章、第4章、第5章由杨弘平完成;第2章、第3章和第13章由吕海华完成;第7章、第8章、第11章由史江萍完成;第9章由代钦完成;第6章和第10章由李波完成;第12章由杨弘平和史江萍共同完成;其他参与编写的还有朱克敌、曾祥萍、孙宪丽、关颖、祝世东、衣云龙等排名不分先后。
由于编者水平有限,书中难免有疏漏之处,敬请读者谅解。
如果下载有问题,请电子邮件联系,邮件主题为“UML2与Rose示例”。
编者
2016年5月
软件设计与建模的艺术:从概念到实现的深度探索 在日益复杂且快速迭代的软件开发领域,清晰、高效的设计和建模是项目成功的基石。本书旨在为读者提供一套系统性的方法论,引领大家穿越软件设计的迷雾,掌握从初步构想到最终实现的全过程。我们不拘泥于任何特定的工具或技术,而是专注于软件建模的普适性原则、核心思想以及背后的逻辑,帮助您构建 robust(健壮)、maintainable(易于维护)且 scalable(可扩展)的软件系统。 第一部分:软件设计的哲学与基石 在深入技术细节之前,理解软件设计的本质至关重要。本部分将带领您思考“为什么”需要设计,以及“好设计”的标准是什么。 1. 为何要设计?——超越代码的视野 解决复杂性: 软件系统规模庞大、逻辑纠缠,良好的设计是应对复杂性的唯一途径。我们将探讨如何将大问题分解为小模块,降低认知负担。 沟通的桥梁: 设计文档是开发团队、产品经理、客户之间沟通的通用语言。一个清晰的设计能够确保所有人对系统的理解一致,减少误解和返工。 可维护性的根源: 软件并非一成不变,需求会变,技术会迭代。良好的设计使软件易于理解、修改和扩展,延长其生命周期,降低维护成本。 质量的保障: 设计阶段的错误比编码阶段的错误修复成本高出无数倍。通过前期的严谨设计,可以有效规避潜在问题,提升软件质量。 效率的催化剂: 清晰的设计能够指导编码,减少不确定性,提高开发效率。同时,优秀的设计模式也能复用成功经验,避免重复造轮子。 2. 优秀设计的衡量标准 清晰性 (Clarity): 设计是否易于理解?各个组件的功能是否明确? 一致性 (Consistency): 命名、风格、模式等方面是否保持一致? 简洁性 (Simplicity): 是否避免了不必要的复杂性?是否使用了最少的必要元素? 可扩展性 (Extensibility): 系统是否容易添加新功能或适应变化? 可维护性 (Maintainability): 系统是否容易理解、修改和调试? 可测试性 (Testability): 系统是否容易进行单元测试和集成测试? 模块化 (Modularity): 系统是否被分解成独立的、可替换的模块? 低耦合 (Low Coupling) 与高内聚 (High Cohesion): 这是衡量模块化程度的两个关键指标。高内聚意味着一个模块内的元素高度相关,职责单一;低耦合意味着模块之间的依赖性尽可能小。我们将深入剖析这两个概念及其重要性。 第二部分:建模的语言与方法 建模是设计的具体体现,它提供了一种结构化的方式来描述系统的各个方面。本部分将介绍通用的建模概念,并引出一种强大的建模语言。 1. 什么是建模?——从抽象到可视 模型的作用: 模型是现实世界或抽象概念的简化表示。在软件工程中,模型帮助我们理解、分析、设计和沟通复杂的系统。 模型的种类: 从概念模型到物理模型,从静态模型到动态模型,我们将概述不同层次和维度的模型。 建模的价值: 提升理解力、促进沟通、发现问题、指导实现、记录决策。 2. 引入统一建模语言 (UML) 的核心理念 UML 的诞生与使命: 了解 UML 如何成为行业标准,以及它旨在解决什么问题。 UML 的视图: UML 提供了多种视图来描绘软件系统的不同方面,包括: 结构视图: 关注系统的静态结构,例如类、对象、组件、包等。 行为视图: 关注系统的动态行为,例如用例、活动、状态、顺序等。 交互视图: 关注对象之间的协作和通信。 UML 的图形符号: 掌握 UML 的基本图形元素,如类框、接口、关联、泛化、依赖、实现等,理解它们所代表的意义。 第三部分:深入 UML 的结构化建模 结构化建模侧重于描述系统的静态组成部分及其关系。本部分将详细介绍 UML 中用于结构化建模的关键图。 1. 类图 (Class Diagram) —— 软件的蓝图 类: 定义属性(数据)和操作(行为)的模板。 对象: 类的具体实例。 属性: 类的特征,包括名称、类型、可见性(public, private, protected)。 操作 (方法): 类能够执行的行为。 关系: 关联 (Association): 表示类之间的联系,可以包含方向、多重性(1, , 0..1, 1..)。我们将探讨单向关联、双向关联。 聚合 (Aggregation): “has-a”关系,表示整体与部分的关系,但部分可以独立存在。 组合 (Composition): 更强的“has-a”关系,表示整体与部分是生命周期绑定的,部分不能独立存在。 泛化 (Generalization) / 继承 (Inheritance): “is-a”关系,表示子类继承父类的属性和操作。 依赖 (Dependency): 表示一个类依赖于另一个类,例如作为参数传递。 实现 (Realization): 表示类实现了某个接口。 接口 (Interface): 定义了一组操作的契约,但不提供具体实现。 包 (Package): 用于组织和分组相关的模型元素,管理命名空间。 构建高质量的类图: 如何避免常见的陷阱,如何通过类图反映业务领域。 2. 对象图 (Object Diagram) —— 实例的快照 对象的表示: 对象名称后跟冒号和类名。 对象之间的链接: 表示对象实例之间的特定关联实例。 对象图的用途: 验证类图设计,展示特定场景下的数据状态。 3. 组件图 (Component Diagram) —— 软件的物理结构 组件: 软件的物理单元,如库、可执行文件。 接口: 组件提供或需要的服务。 组件之间的关系: 依赖、实现。 组件图的意义: 描绘系统的部署和模块化结构。 4. 部署图 (Deployment Diagram) —— 硬件与软件的映射 节点 (Node): 物理设备或执行环境(如服务器、计算机、嵌入式设备)。 制品 (Artifact): 软件的物理表示,如可执行文件、数据文件。 节点之间的通信路径: 表示设备之间的网络连接。 部署图的作用: 展现软件如何在硬件环境中运行。 第四部分:探索 UML 的行为建模 行为建模侧重于描述系统的动态行为、交互和生命周期。本部分将介绍 UML 中用于行为建模的关键图。 1. 用例图 (Use Case Diagram) —— 系统的外部视角 用例 (Use Case): 系统为用户提供的一项功能或服务。 参与者 (Actor): 与系统交互的外部实体(人、其他系统)。 用例之间的关系: 包含 (Include): 一个用例包含另一个用例的功能。 扩展 (Extend): 一个用例可以扩展另一个用例的行为。 泛化 (Generalization): 一个用例是另一个用例的特例。 用例的价值: 捕获需求,定义系统边界,与用户进行有效沟通。 2. 活动图 (Activity Diagram) —— 工作流与业务流程 活动 (Activity): 系统的某个动作或步骤。 动作流 (Control Flow): 活动之间的顺序。 分支 (Branch) 与合并 (Merge): 表示条件判断和并行执行。 泳道 (Swimlane): 将活动分配给不同的参与者或部门。 活动图的应用: 描绘业务流程、用户操作流程、算法实现。 3. 状态机图 (State Machine Diagram) —— 对象生命周期的管理 状态 (State): 对象在特定时刻所处的情况。 转移 (Transition): 从一个状态到另一个状态的改变,由事件触发。 事件 (Event): 引起状态转移的信号。 守卫条件 (Guard Condition): 限制转移发生的条件。 状态机图的意义: 描述对象在生命周期中的不同状态及其响应事件的行为。 4. 顺序图 (Sequence Diagram) —— 对象间的时序交互 生命线 (Lifeline): 表示参与交互的对象。 消息 (Message): 对象之间发送的信号或调用。 激活条 (Activation Bar): 表示对象正在执行某个操作。 时间轴: 从上到下表示时间流逝。 顺序图的用途: 描绘对象之间如何按时间顺序进行协作,理解系统内部的动态交互。 5. 通信图 (Communication Diagram) —— 对象间的协作视角 对象与链接: 强调对象之间的连接关系。 消息: 带有序列号的消息,表示消息的顺序。 通信图与顺序图的对比: 侧重于对象之间的协作关系而非严格的时间顺序。 6. 交互概览图 (Interaction Overview Diagram) —— 组合交互图 混合使用: 将活动图和顺序图等交互图结合起来,描绘复杂的交互流程。 第五部分:从建模到实现的实践 掌握了 UML 的理论和图示,如何将其转化为实际的软件开发过程?本部分将探讨这一转化过程。 1. 需求分析与建模: 如何利用用例图捕获需求,并将其转化为更详细的类图和活动图。 2. 架构设计与建模: 如何通过组件图和部署图描绘系统的整体架构和部署策略。 3. 详细设计与建模: 如何利用类图、顺序图等进行详细的对象设计和交互设计。 4. 模型驱动开发 (MDD) 的概念: 探讨如何利用模型自动生成代码,提高开发效率。 5. 反向工程与模型更新: 如何从现有代码生成模型,以及如何维护模型与代码的一致性。 6. 最佳实践与经验分享: 迭代式建模: 设计并非一次完成,而是一个持续迭代的过程。 保持模型简洁: 避免过度设计和不必要的复杂性。 模型与文档的平衡: 模型是文档的重要组成部分,但并非全部。 团队协作: 如何在团队中有效使用和维护模型。 结论 软件设计与建模是一门艺术,也是一门科学。通过深入理解并实践 UML 的强大功能,您将能够更有效地沟通您的设计理念,更清晰地描绘系统的结构和行为,从而开发出高质量、易于维护的软件。本书致力于为您提供坚实的基础和实用的指导,让您在软件设计的道路上走得更远,做得更好。