目录
本篇文章所使用的软件是StarUML,官网下载地址:http://staruml.io/
UML简介:
- UML是一种基于面向对象的可视化建模语言。
- UML采用了一组形象化图形符号作为建模语言,使用这些符号可以形象地描述系统各个方面。
- UML通过建立图形之间的各种关系来描述模型,如类与类之间的关系。
UML共有10种图:
10种图分为两大类:静态模型图和动态模型图。
静态模型图:描述系统的静态结构。(在静止状态下,系统的组成以及相互之间的关系)
动态模型图:描述系统行为的各个方面。(比如系统运行时,这个系统多少个人登录、使用、维护等等。)
静态模型图包括:类图、对象图、包图、组件图、部署图。
动态模型图包括:用例图、时序图、协作图、状态图、活动图。
UML中的关系主要包括:
- 关联关系(association)
- 依赖关系(dependency)
- 泛化关系(generalization)
- 实现关系(realization)
StarUML基本的使用:
以绘制用例图为例,第一步,打开StarUML会见到如下窗口,选择默认Default Approach即可。
第二步,右键找到Add Diagram,选择Use Case Diagram,然后ctrl + s保存,即可创建成功。
第三步,创建好用例图之后,看到左边侧边栏有很多选项,左击要选择的即可
小锁表示批量操作,点击上面的Select就可以取消批量操作。
第四步,画好图之后可以选择把文件导成图片,单击File,找到Export Diagram,选择图片保存格式即可。
用例图(Use Case Diagram):
用例图也称为用户模型图,是从软件需求分析到最终实现的第一步,它是从客户的角度来描述系统功能。
用例图包括3个基本组件:参与者(Actor),用例(Use Case),关系。
参与者(Actor):与系统打交道的人或者其他系统,即使用该系统的人或者事物。在UML中参与者用人形图标表示。
用例(Use Case):代表系统的某项完整的功能。在UML中使用一个椭圆来表示。
关系:定义用例之间的关系,如泛化关系、扩展关系(expand)、包含关系(include)
泛化关系(generalization):表示同一业务的不同技术实现,也就是父用例和各个子用例之间的关系。比如,我们在使用支付功能时,支付方式分为支付宝支付、分期支付、货到付款等,支付就叫做父用例,支付宝支付、分期支付、货到付款就叫做各个子用例。
包含关系(include):可以包含其他用例具有的行为,并把包含的用例行为作为自身行为的一部分。在UML中包含关系用虚线箭头加"include",箭头指向被包含的用例。比如,在学生信息管理系统中,需要对学生信息进行添加、修改、删除操作,这些操作都要包含更新数据库功能,更新数据库这一用例就可以作为包含关系。
扩展关系(extend):如果在完成某个功能时,偶尔会执行另外一个功能,则用扩展关系。在UML中扩展关系用虚线箭头加"extend",箭头指向被扩展的用例。比如,我们老师在保存成绩时,发现不及格同学,会使用到打印补考证这一用例。
总结:用例图其实站在客户(使用者)的角度,把整个软件系统使用过程描述出来。也可以达到固定客户需求的目的。
类图(Class Diagram):
类是类图的主要组件,类由三部分组成:类名,属性和方法。在UML中,类用矩形来表示,顶端部分存放类的名称,中间部分存放类的属性,包括属性的类型及值,底部部分存放类的方法,包括方法的参数和返回值类型。
在UML中可以根据实际情况有选择的隐藏属性部分或者方法部分或者两者都隐藏。
在UML中,公有属性用+表示,私有属性用-表示,保护属性用#表示。
类和类之间的关系:接口、泛化、依赖、关联。
接口(Interface):接口中包含方法,但是不包含属性。在UML中接口用一个带有名称的圆圈表示,并且通过一条实线与它的模型相连。有时候接口也用普通类表示。
泛化(Generalization):在UML中泛化关系用来表示类与类,接口与接口之间的继承关系。在UML中泛化关系用一条实线空心箭头由子类指向父类。
依赖(Dependency):一个类是另外一个类的函数参数或者函数返回值。在UML中,依赖是一条虚线。
关联(DirectedAssociation):一个类是另外一个类的成员变量。在UML中,关联是一条实线。
聚合:聚合关系是关联关系的一种,是更强的关联关系。聚合是整体和部分之间的关系,例如汽车由引擎、轮胎以及其它零件组成。聚合关系也是通过成员变量来实现的。但是,关联关系所涉及的两个类处于同一个层次上,而聚合关系中,两个类处于不同的层次上,一个代表整体,一个代表部分。 在UML中,聚合是空心菱形加实线。
组合:组合关系是比聚合关系更强的关联关系,类和类之间就像生命体,类和类之间是整体和部分的关系。比如公司和部门之间,没有了公司,部门也就没有了,没有了各个部门,公司也就没有了。在UML中,组合是实心菱形加实线。
关联关系中的数量问题:
表示法 | 说明 |
0 | 表示0个对象 |
0..1 | 表示0-1个对象 |
0..n | 表示0-n个对象 |
1 | 表示1个对象 |
1..n | 表示1-n个对象 |
n | 表示n个对象 |
* | 表示任意多个对象 |
在StarUML中设置数量关系:
创建类图示例:
给类添加属性:
给类添加方法:
给类的方法设置返回值类型:
对象图(Object Diagram):
对象图是类图的一个实例,用于显示系统执行时可能出现的样子,对象图用带下划线的名称来表示对象。
时序图(Sequence Diagram):
时序图用于描述对象之间消息传递的时间顺序,即用例中的行为顺序。
当执行一个用例时,时序图中的每条消息对应了一个类操作或者引起转换的触发事件。
(这段话看图容易理解)在UML中,时序图表示为一个二维关系图,其中纵轴是时间轴,时间延竖线向下延伸,横轴代表在协作图中各个独立的对象。当对象存在时,生命线用一条虚线表示,消息用从一个对象的生命线到另一个对象的生命线的箭头表示。箭头以时间的顺序在图中排列。
对象:时序图中对象使用矩形表示,并且对象的名称下有下划线。将对象置于时序图的顶部说明在交互开始时对象就已经存在了。如果对象的位置不在顶部,表示对象是在交互过程中被创建的。
生命线:生命线是一条垂直的线。表示时序图中的对象在一段生命周期内的存在。每个对象底部中心位置都带有生命线。
消息:两个对象之间的单路通信。从发送方指向接收方。(注意区分:同步事件和异步事件)
再来看个例子:Java用户登录案例
活动图(Activity Diagram):
在UML中,活动图本质上就是流程图,它用于描述系统的活动,判定点和分支等。
分支与汇合:分叉用来描述并发线程,每个分叉可以有一个输入转换和两个或多个输出转换。在UML中分叉和汇合用一条粗线表示。
泳道:泳道将活动图的活动划分为若干组,并将每一组指定给负责这组活动的业务组织。泳道区分负责活动的对象,明确地表示哪些活动是由哪些对象进行的。每个活动指定明确的属于一个泳道。在活动图中,泳道用垂直实线绘出,垂直线分隔的区域即为泳道。
动作状态:原子的,不可中断的动作。在UML中动作状态用圆角矩形表示,动作状态所表示的动作写在圆角矩形内部。
分支与合并:一般用于表示对象类所具有的条件行为。用一个布尔型表达式的真假判定动作的流向。条件行为用分支和合并表达。在活动图中,分支用空心小菱形表示。分支包括一个入转换和两个带条件的出转换。
带泳道的活动图:能把两个系统之间的关系表示清楚。
状态图(Statechart Diagram):
状态图:通过建立对象的生存周期模型来描述对象随时间变化的动态行为。状态图应该算是UML十图中最难得部分。
进程状态示例图:
协作图(Collaboration Diagram):
协作图也叫合作图,是一种交互图。时序图主要侧重于对象间的消息传递在时间上的先后关系,而协作图表达对象间的交互过程及对象间的关联关系。
包图(Package Diagram):
包图:由包和包之间的关系组成,包的图标就如同一个带标签的文件夹。
包提供了一种用于组织各种元素的分组机制。在UML中,包用来对元素进行分组,并为这些元素提供命名空间。包所拥有的或者引用的所有元素称为包的内容,包没有实例。
在UML中包图和组件图放在一块了,Add Diagram的时候从Component Diagram寻找即可。
组件图(Component Diagram):
组件图用来建立系统中各组件之间的关系,各组件通过功能组织在一起。
JavaBean、ejb、jsp都是组件。在UML中,组件使用在左侧有两个小矩形的大矩形来表示。
组件图可以用来设计系统的整体构架。
部署图(Deployment Diagram):
部署图用来帮助开发者了解软件中各个组件驻留在硬件的什么位置,以及这些硬件之间的交互关系。
节点:用来表示一种硬件,可以是打印机,计算机等。节点的标记符号是一个三维框,在框的左上方包含了节点的名称。
通信关联:节点通过通信关联建立彼此的关系,采用从节点到节点绘制实现来表示关联。