《统一建模语言UML(软件工程第2版21世纪高等学校规划教材)》是一本UML2.0学习和应用手册。《统一建模语言UML(软件工程第2版21世纪高等学校规划教材)》不仅详细阐述了UML在建模活动中的基本应用方法,而且对UML的建模图示在软件生命周期中的应用进行了分类。在介绍UML的10种最为重要的语言图示时,首先强调的是该种UML图示在软件建模活动中的建模目的。然后,根据UML各种图示的语法结构详细解释了该图示在实际建模中的不同表示形式和语法,最后应用UML图示对一个贯穿全书的真实软件工程项目实例进行了建模示范,使读者在深入理解UML语义、语法和图示法的同时,能牢牢把握住学习该UML图示的目的和意义。本书可作为高等学校计算机、电子、通信等专业高年级学生及研究生课程教学用书,同时对软件研究者和开发人员也颇具有参考价值。
献给:
Derek, Karen, 我的妻子和我的父母。
——袁涛
第2版前言
自《统一建模语言UML》出版后,已经5次印刷。我一直留意读者对于该书的反馈。读者“一生开心”在网上对该书的评价: “东西讲得不错, UML图讲得比较清楚,没有案例,可惜了。”我承认该书确实需要加入更好的案例。所以,添加新案例是第2版的主要工作。在第2版中,全书被分为两篇: 知识篇和实践篇。知识篇主要是第1版的内容,新增案例全部放到实践篇。由于本书所举案例侧重的是在面向对象分析和设计方法中如何应用UML建模,所以,所举案例并没有刻意覆盖所有种类的UML图模型。另外,第2版对MDA和MOF的概念以及MDA、MOF和UML之间的关系进行了补充介绍。这样有利于读者对UML知识体系有一个较全面的认识。第2版增加附录C的目的是为学生提供一个创建面向对象设计模型的实践平台,首先鼓励学生在附录C的面向对象分析模型基础上进一步完善系统的质量(可靠性、易用性、可修改性、可维护性、可重用性、可适应性等),其次要求学生参考第13章的原理采用设计模式或开源框架等方法提出各种有创意的解决方案,最后要求学生使用UML状态图、类图、包图和部署图完成附录C的全部设计任务。
袁涛负责第2版的全部新增章节的撰写和全书校对工作。另外,我要特别感谢我的团队成员: 惠丙凯,孔凤娟,朱晓岚,汤志博在整理新增附录资料方面给予的无私帮助。
袁涛
2013年12月
第1版前言
在回国的这几年里,我一直在努力使用UML与软件项目开发者、我的学生以及同事进行软件分析和设计方面的交流。 但是,我发现周围还有许多软件设计和开发人员并不熟悉UML这个在软件工程领域已经成熟应用十几年的建模工具。在软件工程实践中,甚至有相当一部分软件设计人员、程序员和学生还在为是否学习和使用UML而困惑。我认为造成这种困惑的主要原因是对UML的应用目的和它的建模对象不十分清楚,这就使UML使用者或初学者无法有效地把UML中的建模语言与实际软件开发中的问题建立起关联。因此,本书不仅在UML语法方面给予了详细的描述,而且在每种UML图示中着重阐述了图示的产生环境、使用目的和应用对象。 为了更好地理解本书的组织结构和目的,本书在以下三个方面进行了论述和规范。
1. 关于UML建模图示的应用分类问题
对UML中诸多的建模图示,人们有着不同的分类和建模理解,例如一种很常见的分类是把UML的建模图示分为需求、静态、行为、交互和实现等几个不同领域的建模工具,但是,上述分类方式很容易给UML学习和使用带来困惑,因为上述的几个领域在软件工程中几乎是完全交叉的,并不能帮助UML使用者明确UML建模如何与实际开发相关联。
本书在第1章导言中,较为系统地论述了UML建模图示的分类方法及其在软件开发和运行中的固有特征。 根据建模工具的特点和软件固有特征,对UML的14种建模图示在软件生命周期中的应用进行了分类。 我们建议本书的读者首先要理解导言中关于UML建模工具分类的方法和目的,然后,再以该分类方法为知识框架,进一步学习UML每一种具体的建模方法。
2. 关于面向对象分析和设计中术语的使用问题
建模的过程就是对一个事物的一个抽象化和准确化的过程。 在面向对象分析和设计中,对各种各样建模对象的描述必须规范化。 注意,这里提出的术语规范化并不是UML,而是被UML描述的面向对象分析和设计中描述软件结构和行为的语言。
例如,在软件工程中经常遇到的术语: 软件、系统、类、对象、实例、方法、属性、操作、行为、状态、成员变量、消息、静态、动态、运行和执行等。其中,比较容易被混淆通用的如: 方法、属性、操作、行为、状态、成员变量、消息、静态、动态和运行等。 应用UML建模时,这种没有严格定义指导下的术语混用,很难明确UML建模的目的和对象,这使得在使用模型进行交流时给人们带来极大的不准确性,从而造成在不同类型的模型中,或在同类模型中由于所被描述对象的术语混用而出现理解上的差异。 本书为了使读者准确理解书中强调的知识体系结构,特在此建立本书范围内的面向对象分析和设计术语的应用规范。
1) 与软件系统相关的术语
软件系统是指一个具有整体功能的软件,它与构件和类相区别。 在软件系统的概念下,有两种状态: 非执行状态(或静止状态)、执行状态(或运行状态)。 本书不使用“动态”这个词。 在本书中,软件系统只有在运行状态下才有行为可言,但是,无论在静止还是运行状态下,软件系统均有各自特殊的结构形式。
2) 与类相关的术语
类是指软件在非运行状态下的基本结构单位,它与对象相区别。 在类的概念范围内,本书使用描述类的术语有: 属性(Attribute)和成员变量(Member Variable),这两个词基本可以相互代替使用; 方法(Method) 和操作(Operation)也可以相互代替,但是本书只用方法(Method) 这个词汇来描述类。
3) 与对象相关的术语
对象是类在系统执行状态下的存在形式。 它与类相区别。 在对象的概念范围内,本书使用描述对象的术语有: 属性(Attribute)和状态(State),这两个词在本书中可以代替使用; 行为(Behavior)和消息(Message),在本书中这两个词可以互相代替使用描述对象。
3. 本书章节的组织和内容特点
在本书中,每章的第一节讲述的是UML图示的目的和意义,这样安排的目的是让读者在学习某种具体UML图示建模之前,了解该图示的应用领域和建模对象,以便在进一步学习图示语法时,有助于更好地了解图示中建模方法的设计理念,以便读者能有的放矢地学习该建模工具。在学习UML时,学生经常提出一些典型问题,例如,顺序图与通信图的区别; 在类图中,关联(Association)和依赖(Dependency)的实践差别问题; 类图中xor关联的实现问题等。针对这些问题,本书均给出详尽解释,另外也提供了一些UML建模中的实施技巧。总之,本书不仅对UML语法进行解释,而且在各个章节中尽量加入平时应用UML时积累的经验和方法,这更有助于读者快速理解和应用UML建模。
在描述UML语法过程中,本书针对每种UML建模图示都以公式的形式把该建模图示最为重要的组成元素列出,然后,根据公式中列出的每个元素做出详细解释,这样可以使读者在纷乱的UML图示元素符号中把握其知识体系结构。
本书是以UML 2.0为基础阐述其建模语言的,没有关于与UML 2.0以前版本的比较。 所以,书中提到的UML,指的就是UML 2.0版。 另外,根据UML的各种不同建模语言应用的广泛性,本书没有对UML 2.0新引进的时间配置图、综合交互图和复合结构图进行专门阐述。
袁涛负责全书所有章节内容的组织,并完成第1、3、4、6、7、8、10章的内容撰写; 孔蕾蕾负责第2、5、6、9、11章,以及附录A、B和术语对照表的撰写。
最后我要强调的是,这本书能够问世还要特别感谢哈尔滨商业大学校长曲振涛博士的支持,同时也感谢我的好友穆业伟先生对本书出版的关心。
袁涛
2008年11月
第1部分 知识篇
第1章 导言
1.1 模型
1.2 开发软件为什么需要模型
1.3 什么是统一建模语言
1.4 UML的发展史
1.5 模型驱动的软件构架
1.5.1 MDA的三种模型
1.5.2 MDA的三个核心建模标准
1.5.3 OMG的4层模型结构
1.6 UML的建模对象
1.6.1 UML的结构模型
1.6.2 UML的行为模型
1.7 总结
第2章 用例图 第1部分 知识篇
第1章 导言
1.1 模型
1.2 开发软件为什么需要模型
1.3 什么是统一建模语言
1.4 UML的发展史
1.5 模型驱动的软件构架
1.5.1 MDA的三种模型
1.5.2 MDA的三个核心建模标准
1.5.3 OMG的4层模型结构
1.6 UML的建模对象
1.6.1 UML的结构模型
1.6.2 UML的行为模型
1.7 总结
第2章 用例图
2.1 基于用例的系统行为建模
2.2 用例图
2.3 用例图的表示方法
2.3.1 参与者
2.3.2 用例
2.3.3 用例之间的关系
2.4 总结
第3章 对象图
3.1 基于对象的系统瞬间状态建模
3.2 对象图
3.3 对象图的表示方法
3.3.1 对象
3.3.2 链
3.4 总结
第4章 顺序图
4.1 基于交互的对象行为建模: 交互时的行为顺序
4.2 顺序图
4.3 顺序图的表示方法
4.3.1 生命线
4.3.2 活动条
4.3.3 消息
4.3.4 交互框
4.4 案例分析
4.5 总结
第5章 通信图
5.1 基于交互的对象行为建模: 交互时的对象结构
5.2 通信图
5.3 通信图的表示方法
5.3.1 交互的参与者
5.3.2 链接
5.3.3 消息
5.4 案例分析
5.5 总结
第6章 类图
6.1 基于类的系统结构建模
6.2 类图
6.3 类图的表示方法
6.3.1 表示类
6.3.2 类的关系
6.4 总结
第7章 状态图
7.1 基于状态的对象行为建模
7.2 状态图
7.3 状态图的表示方法
7.3.1 状态
7.3.2 迁移
7.4 案例分析
7.5 总结
第8章 活动图
8.1 基于活动的系统行为建模
8.2 活动图
8.3 活动图的表示方法
8.3.1 活动和动作
8.3.2 活动边
8.3.3 活动节点
8.3.4 活动划分或泳道
8.3.5 调用其他活动
8.4 案例分析
8.5 总结
第9章 包图
9.1 基于包的系统静止状态下的结构建模
9.2 包图
9.3 包图的表示方法
9.3.1 包
9.3.2 包中元素的可见性
9.3.3 包之间的关系
9.4 总结
第10章 构件图
10.1 基于构件的系统静止状态下的结构建模
10.2 构件和构件图
10.2.1 构件
10.2.2 构件图
10.3 构件图的表示方法
10.3.1 构件
10.3.2 供接口和需接口
10.3.3 构件间的关系
10.3.4 实现构件的类
10.3.5 外部接口——端口
10.3.6 连接器
10.3.7 显示构件的内部结构
10.4 总结
第11章 部署图
11.1 基于物理环境部署的系统静态结构建模
11.2 部署图
11.3 部署图的表示方法
11.3.1 制品
11.3.2 节点
11.3.3 部署
11.3.4 部署规约
11.3.5 通信路径
11.4 总结
第2部分 实践篇
第12章 面向对象分析的UML模型
12.1 面向对象分析设计
12.2 分析模型
12.2.1 用例图模型
12.2.2 在用例图模型基础上编写用例
12.2.3 顺序图模型和概念类图模型
12.3 总结
第13章 面向对象设计的UML模型
13.1 设计模型和软件的质量问题
13.2 UML在设计建模中的应用
13.2.1 Singleton模式的顺序图模型
13.2.2 Factory Method 模式的顺序图模型
13.2.3 设计建模的UML类图
13.3 总结
附录A UML的扩展机制
附录B PPS项目的部分主要用例的用例规约
附录C 某离散性制造装配公司的客户端应用
附录D 第12-13章中模型的Java可执行程序
术语英汉对照表
参考文献