本书为广大读者能够体验UML 2提供了一个令人激动的机会,从对UML进行概念性介绍开始,全面讲述了面向对象的方法、建模,以及UML的方方面面,涵盖了UML 2.0的所有最新特性,最后讲述了一个实际案例,其中插入了作者丰富的实践经验。本书内容全面、示例清晰、文字诙谐,非常便于读者的阅读和理解。随书附带的光盘包含本书中所有的UML模型、Java代码,还有相关建模工具的链接,例如,Rational XDE,Visio和TogetherJ。
本书非常适合于希望把UML应用到实际项目中的所有读者。
第1章 UML介绍
1.1 UML概述
1.1.1 方法之战
1.1.2 UML方法
1.1.3 UML的认可
1.1.4 OMG标准
1.2 方法和建模语言
1.3 面向对象软件开发
1.4 UML的用途
1.4.1 不同类型的系统
1.4.2 业务工程
1.5 系统开发阶段
1.5.1 需求分析阶段
1.5.2 分析阶段
1.5.3 设计阶段
1.5.4 编码阶段
1.5.5 测试阶段
第2章 UML概述
2.1 视图
2.1.1 用例视图
2.1.2 逻辑视图
2.1.3 组件视图
2.1.4 并发视图
2.1.5 部署视图
2.2 图
2.2.1 用例图
2.2.2 类图
2.2.3 对象图
2.2.4 状态图
2.2.5 顺序图
2.2.6 协作图
2.2.7 活动图
2.2.8 组件图
2.2.9 部署图
2.3 模型元素
2.4 通用机制
2.4.1 修饰
2.4.2 注解
2.4.3 规格说明
2.5 扩展UML
2.5.1 构造型
2.5.2 标记值
2.5.3 约束
2.6 用UML建模
2.7 工具
2.7.1 绘图支持
2.7.2 模型存储库
2.7.3 导航
2.7.4 多用户支持
2.7.5 代码生成
2.7.6 逆向工程
2.7.7 工具集成
2.7.8 模型互换
2.8 本章小结
第3章 用例建模
3.1 用例图
3.2 系统
3.3 参与者
3.3.1 发现参与者
3.3.2 UML中的参与者
3.3.3 参与者之间的关系
3.4 用例
3.4.1 发现用例
3.4.2 UML中的用例
3.4.3 用例之间的关系
3.5 描述用例
3.6 测试用例
3.6.1 排练用例
3.7 实现用例
3.8 本章小结
第4章 类. 对象及它们的关系
4.1 类和对象
4.2 类图
4.2.1 发现类
4.2.2 名称部分
4.2.3 属性部分
4.2.4 操作部分
4.2.5 使用简单类型
4.3 关系
4.4 关联
4.4.1 标准关联
4.4.2 对象图
4.4.3 递归关联
4.4.4 关联中的角色
4.4.5 限定关联
4.4.6 或关联
4.4.7 有序关联
4.4.8 关联类
4.4.9 三元关联
4.4.10 聚合
4.5 泛化
4.5.1 标准泛化关系
4.5.2 受约束的泛化关系
4.6 依赖和精化关系
4.7 约束和导出(规则)
4.8 接口
4.9 包
4.10 模板
4.11 模型质量
4.11.1 什么是好模型
4.11.2 模型与它的目的匹配吗
4.11.3 模型协作
4.11.4 模型复杂性
4.12 本章小结
第5章 动态建模
5.1 对象(消息)之间的交互
5.2 状态图
5.2.1 状态和转换
5.2.2 事件
5.3 在状态图之间发送消息
5.3.1 子状态
5.3.2 历史指示器
5.4 顺序图
5.4.1 一般形态和实例形态
5.4.2 并发对象
5.4.3 定义迭代和约束的标签
5.4.4 创建和销毁对象
5.4.5 递归
5.5 协作图
5.5.1 消息流
5.5.2 链接
5.5.3 对象的生命期
5.5.4 使用协作图
5.6 活动图
5.6.1 动作和转换
5.6.2 泳道
5.6.3 对象
5.6.4 信号
5.6.5 使用活动图进行业务建模
5.7 本章小结
第6章 高级动态建模:实时系统
6.1 面向对象和实时系统
6.2 实时概念
6.2.1 主动类和主动对象
6.2.2 通信
6.2.3 同步
6.2.4 在Java中实现并发和同步
6.3 在UML中实时建模
6.3.1 状态图
6.3.2 顺序图
6.3.3 协作图
6.3.4 活动图
6.3.5 组件图和部署图
6.4 适应到实时系统
6.4.1 实时系统建模要特别注意的一些问题
6.5 处理相关问题
6.6 本章小结
第7章 物理体系结构
7.1 逻辑体系结构
7.2 物理体系结构
7.2.1 硬件
7.2.2 软件
7.3 组件图
7.3.1 编译时组件
7.3.2 链接时组件
7.3.3 运行时组件
7.4 部署图
7.4.1 节点
7.4.2 连接
7.4.3 组件
7.4.4 对象
7.5 节点的复杂建模
7.6 将组件分配到节点
7.7 本章小结
第8章 扩展UML
8.1 语义核心概念
8.2 标记值和特性
8.2.1 用于元素的标记值
8.2.2 用于类型. 实例. 操作和属性的标记值
8.2.3 用于模型元素和组件的标记值
8.2.4 定义自己的标记值
8.3 约束
8.3.1 用于泛化的约束
8.3.2 用于关联的约束
8.3.3 用于关联角色的约束
8.3.4 用于消息. 链接角色和对象的约束
8.3.5 定义自己的约束
8.4 构造型
8.4.1 用于类型的构造型
8.4.2 用于依赖的构造型
8.4.3 用于组件的构造型
8.4.4 用于注解的构造型
8.4.5 用于简单类型的构造型
8.4.6 用于泛化的构造型
8.4.7 用于包的构造型
8.4.8 用于类的构造型
8.4.9 用于操作的构造型
8.4.10 用于主动类的构造型
8.4.11 定义自己的构造型
8.5 本章小结
第9章 设计模式和UML
9.1 概述
9.1.1 “Gang of Four”模式
9.1.2 代理模式
9.2 UML中的建模模式
9.2.1 参数化协作
9.2.2 在图中显示模式
9.3 模式和用例
9.4 本章小结
第10章 使用UML的过程
10.1 定义和理解软件工程过程
10.1.1 过程上下文
10.1.2 过程用户
10.1.3 过程步骤
10.1.4 过程评估
10.2 UML过程的基础
10.2.1 用例驱动系统
10.2.2 以体系结构为中心
10.2.3 迭代
10.2.4 增量
10.3 传统的面向对象方法
10.3.1 需求分析
10.3.2 分析
10.3.3 设计
10.3.4 实现
10.3.5 测试
10.4 Rational Objectory Process
10.4.1 生命周期
10.4.2 初始
10.4.3 细化
10.4.4 构造
10.4.5 移交
10.4.6 与传统过程的比较
10.5 过程工具
10.6 本章小结
第11章 开始应用UML
11.1 转换到UML
11.1.1 升级Booch方法
11.1.2 升级OMT方法
11.2 一个通用升级方法
11.3 建模会议. 工具和技术
第12章 案例学习
12.1 需求
12.2 分析
12.2.1 需求分析
12.2.2 问题域分析
12.3 设计
12.3.1 体系结构设计
12.3.2 详细设计
12.3.3 用户界面设计
12.4 实现
12.5 测试和实施
12.6 本章小结
12.7 练习
12.7.1 分析练习
12.7.2 设计和构造练习
可视化图符
术语表
从我们在面向对象领域中从事培训和顾问工作所得的经验来看, 缺乏面向对象建模的标准这一严重问题已经越来越明显地表现出来. 现有的每一种方法. 工具和实践都有自己单独的一套符号和术语, 由此导致大家在学习过程中有许多容易混淆的地方, 并产生挫折感. 尤其对那些试图学会面向对象技术的人来说, 不应该把主要精力都放在记忆每一种特定的工具或标记法中的各种对象如何绘制上(如各种箭头应该往哪个方向绘制), 而应该集中精力创建高质量的模型, 从而帮助他们构建更好的. 更有效的软件系统.
当UML(Unified Modeling Language, 统一建模语言)第一次出现时, 面向对象领域中的许多人都以极大的热情来欢迎它, 因为UML正是大家一直所期待的结果. UML可以用于所有类型的系统和所有的开发阶段, 能适应各种大小规模的应用, 并且针对不同的情况有许多不同的处理方法. 通过建立这样一种通用的建模语言, 可以使面向对象技术进一步渗透到主流市场. 这一点已经能够从许多新涌现出来的基于UML的新一代CASE和可视化建模工具中明显地感受到. 不仅如此, 在对现有的或新的过程/方法的进一步开发中, UML的作用也是显著的.
UML的贡献不仅仅在于它是一种标准, 创建了一个统一的标记法, UML还包括一些在面向对象领域中通常无法找到的. 新颖而有趣的概念. 例如, 如何在一个建模语言中描述和使用模式, 如何使用构造型的概念对建模语言进行扩展和适应, 如何提供一种从系统的概念性模型到物理体系结构中的可执行组件的全面跟踪能力等. 因此, 懂得UML不仅仅意味着学习各种符号及其含义, 而是意味着在一种代表最新发展水平的模式下去学习面向对象建模.
UML是由Grady Booch, James Rumbaugh和Ivar Jacobson(他们被公认为建模领域的三巨头)一起设计的. 他们的工作之所以给人印象深刻, 不仅仅在于UML是一种优秀的建模语言, 更重要的是, 为了取得这种标准化的成果, 他们三个人能够放弃自己的方法和标记法. 因为他们的工作, 所以现在方法学家. 建模工具制造者. 培训者和从业者都可以集中精力去寻找和建立合适的方法将UML应用到实际系统中, 而不用再去争论哪一种标记法最好了.
本书的结构
本书的目的是为读者深入学习UML提供一个综合的. 详细的指南. 现在市面上有一些OMG(Object Management Group, 对象管理组织, 是面向对象领域的标准化领导机构), Booch, Rumbaugh和Jacobson的参考书, 这些书的主要笔墨都放在了描述UML的最终定义上. 而本书则试图以一种完整而实用的方式向读者展示UML语言, 其中覆盖了所有已定义的图和概念. 我们已经尽可能地去避免做理论上的探讨, 并且在本书的文字中包括了大量的示例和示意图——毕竟这是一本介绍可视化建模语言的书. 然而, 要清楚明了地展示UML, 就不能不从总体上讨论面向对象的建模和技术. 因此, 本书也花费了大量笔墨来介绍它们. 我们也覆盖了实时系统. 设计模式和过程以及其他一些有助于读者深入理解UML的重要话题. 我们以一个案例学习来结束本书, 此案例演示了如何在一个小型应用中使用UML. 最后还给读者布置了一些练习, 以便读者以不同的方式来扩展该案例学习.
第1章包含统一建模语言的背景信息:UML是如何产生的, 怎样才能使用UML以及UML的设计目标. 本章还介绍了UML所使用的语言环境, 并对全书的结构做了描述.
第2章对UML做了一个概述, 使读者对该语言有一个感性认识. 其中描述了最常用的元素及它们的关系, 补充介绍了一些系统的各种视图. 本章最后讨论了使用UML进行建模的问题.
从参与者(Actor)的观点来看, 用例建模是一种设计得很好的用来捕获系统需求的技术. 第3章介绍了用例, 以及在UML中如何表示用例.
第4章包含对类和对象的描述. 在UML中主要通过类图来描述它们. 类图是UML中最具有扩展性的图. 类和对象的表示, 它们之间可能拥有的不同关系以及应用在它们上的各种不同变化等内容都在本章中作了全面的讨论. 在本章结束时, 对模型的质量进行了讨论, 包括什么是模型质量以及如何才能在一个模型中取得最佳质量.
类图可以捕获大多数静态结构以及各种类之间和各种对象之间的关系. 然而, 系统中也有一些行为是动态的, 它们在系统生命期中的特定时刻发生, 并随着时间的推移而改变, 或者包含了对象之间的各种复杂的交互. 第5章处理的就是动态建模. 在UML中, 这是通过一些图来描述的, 包括状态图. 活动图. 顺序图和协作图.
实时系统是指那些具有极高时间要求的软件系统. 实时系统中包含一些并发执行的进程(主动对象(Active Object)). 实时系统的一些特定问题以及在UML中如何对实时系统建模是第6章的中心话题.
第7章处理的是物理体系结构. 在前几章中, 我们处理的都是逻辑体系结构. 物理体系结构包括组成系统的代码和可执行软件组件. 相关硬件组件, 如计算机. 设备等, 以及软硬件之间的关系. 这种物理体系结构——通常也被称做系统拓扑结构(Sytem Topology), 和软件组件的分布性都在本章使用UML进行了建模.
第8章描述如何对UML进行扩展和适应. 在该语言中大量地使用了构造型(Stereotype)的概念. 构造型允许用户使用特定的语义创建它们自己的元素类型, 这使得将UML扩展或适应到满足一个特殊过程或体系结构标准成为可能.
在面向对象的编程和设计中, 一个非常有趣的研究领域就是设计模式的概念. 模式用来描述一些针对常见问题的良好的. 可用的和经过广泛验证的解决方案. 第9章描述如何使用UML来表示和说明模式.
由于UML只是一种没有过程的建模语言, 因此, 很有必要来创建或修改一些过程来使用该语言. 第10章描述过程的特征以及需要哪些东西来定义过程, 同时也描述UML的作者在设计UML时所考虑的过程的主要标准. 另外还介绍了统一过程(Unified Process), 这是一个进度管理工作, 并由此提到Rational软件公司力图为UML定义一个过程, 同时给出了一个示例过程来展示如何使用UML. 最后, 讨论了CASE工具的使用, 同时对一些最流行的工具做了概述.
第11章描述如何开始使用UML. 由于许多读者可能是从其他建模语言转到UML的, 因此, 本章讨论了从其他方法(如Booch, OMT或OOSE/Objectory)升级到UML的过程. 同时还描述了如何执行和领导一个建模任务, 其中介绍了一些关于如何才能取得有效的和建设性成果的技巧.
全书以一个案例结束, 该案例演示如何在一个小型应用中使用UML. 将一个系统的需求转换成最终代码的工作是通过一组UML模型来展示的. 接下来有两个附录, 第一个附录是一个可视化术语表, 其中包含UML中所有的模型元素, 并做了简短解释, 第二个附录是一个文本术语表, 其中包含UML中使用的所有常见术语以及简要的描述.
每章结束时都有一个小结, 有时还会给读者留一些练习. 在全书中, 我们使用了Java编程语言来为不同的UML概念和结构显示其相对应的Java代码. 虽然UML的作用远远不止于程序代码的可视化表示, 但是如果能正确地将UML模型转换成代码, 也是非常重要的. 目前市面上大部分介绍UML的书籍和报刊都缺乏这方面的内容, 而本书却做了相当多的转换工作. 这也是本书的一大特色, 有助于读者更好地理解各种UML模型. 之所以选择Java语言来表示这些转换示例, 是因为它是一种现代的面向对象语言, 可以用于任何平台. 由于Java具有与C++ 相同的风格, 因此, C++ 程序员在阅读和理解这些代码时应该是没有任何问题的.
本书还随附一张CD-ROM, 其内容包括:
Rational Rose 4.0 for Windows 9x/NT的Demo版本
案例学习中用到的模型和Java代码