
本书是学习面向软件分析与设计的和应用UML 2.0的教材。它不仅详细阐述了UML在建模活动中的基本应用方法,而且对UML的建模图示在软件生命周期中的应用进行了分类。在介绍UML 10种最为重要的语言图示时,强调该UML图示在软件建模活动中的建模目的,并根据UML各种图示的语法结构详细解释该图示在实际建模中的不同表示形式和语法,最后应用UML图示对一个贯穿全书的真实软件工程项目实例进行建模示范,使读者在深入理解UML语义、语法和图示法的同时,能牢牢把握住学习该UML图示的目的和意义。本书可作为高等学校计算机、电子、通信等专业高年级学生及研究生课程教学用书,同时对软件研究者和开发人员亦颇具参考价值。
在
回国的这几年里,我一直在努力使用UML与软件项目开发者、我的学生以及同事进行软件的分析和设计方面的交流。 但是,我发现周围还有许多软件设计和开发人员并不熟悉UML这个在软件工程领域已经成熟应用十几年的建模工具。在软件工程实践中,甚至有相当一部分软件设计人员、程序员和学生还在为是否学习和使用UML而困惑。我认为造成这种困惑的主要原因是对UML的应用目的和它的建模对象不十分清楚,这就使UML使用者或初学者无法有效地把UML中的建模语言与实际软件开发中的问题建立起关联。因此,本书不仅在UML语法方面给予详细的描述,而且在每种UML语言图示中着重阐述了图示的产生环境、使用目的和应用对象。 为了更好地理解本书的组织结构和目的,我们在以下3个方面进行了论述和规范。
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、7、8、10章的内容撰写; 孔蕾蕾负责第2、5、6、9、11章,以及附录A、B和术语对照表的撰写。
最后我要强调的是,这本书能够问世还要特别感谢哈尔滨商业大学校长曲振涛博士的支持,同时也感谢我的好友穆业伟先生对本书出版的关心。
袁涛
2008年11月
第1章导言
1.1模型
1.2开发软件为什么需要模型
1.3什么是统一建模语言
1.4UML的发展史
1.5UML的建模对象
1.5.1UML的结构模型
1.5.2UML的行为模型
1.6总结
第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总结与强调
附录AUML的扩展机制
附录BPPS项目的部分主要用例的用例规约
术语英汉对照表
参考文献