UML(Unified modeling language 统一建模语言)
是一种用于软件系统分析和设计的语言工具。它用于帮助软件开发人员进行思考和记录思路的结果。
目前市场上常见的建模工具有IBM Rational Rose、Microsoft Visio、Power Designer等,Rose使用最广,市场份额最大。
用例图
由参与者、用例以及用例与用例之间的关系构成的用于描述系统功能的动态视图称为用例图。
参与者(Actor):是指存在于系统外部并直接与系统交互的人、系统或设备等。
参与者按是否使用系统核心功能可分为主要参与者与次要参与者。参与者在画图中用简笔人物画来表示。
用例:用例是系统为参与者提供的功能。对于对用例的命名,我们可以给用例取一个简单、概括性的名称,一般为带有动作性的词。用例在画图中用椭圆来表示,椭圆下面附上用例的名称。
在用例图中用实线箭头连接参与者与用例,箭头方向指向用例。微调:shift+方向键 彻底删除:Ctrl+d
用例之间的关系
①包含关系(include)
②扩展关系(extend)
③泛化关系(generalization)
包含(include)关系指的是两个用例之间的关系,其中一个用例(称作基本用例,base use case)的行为包含了另一个用例(称作包含用例,inclusion case)的行为。
扩展(extend)关系:将基用例中一段相对独立并且可选的动作,用扩展(Extension)用例加以封装,再让它从基用例中声明的扩展点(Extension Point)上进行扩展,从而使基用例行为更简练和目标更集中。
泛华(generalization)代表一般与特殊的关系。
在泛化关系中,子用例继承了父用例的行为和含义。下图为购买彩票的简单实现方式:
类图
类的组成:名称+属性+操作(方法)
类
类的名称必须是名词,不需要前缀或后缀,可以多个名称组合,单词首字母大写。正体字表示类可实例化,斜体字说明类为抽象类。
类的属性(Attributes):
可见性:public、protected、private、Implementation(default)
属性类型与初始值
类的操作(Operations):
可见性:public、protected、private、Implementation
参数
返回类型
抽象类(双击类)——名称斜体
接口
接口中包含方法,但不包含属性,在UML中接口用一个带有名称的圆圈表示,通过一个三角箭头的虚线连接具体的接口与实现类,箭头指向接口。有时候接口也使用普通类的符合表示,步骤:右键-->Stereotype Display-->Label
类之间的关系
依赖(Dependency)
在Java中,依赖关系体现为:局部变量,方法中的参数,和对静态方法的调用。
泛华(Generalization)
在Java中此类关系通过关键字extends明确标识,依赖的特例
实现(Realization)
在Java中此类关系通过关键字implements明确标识,依赖的特例
关联(Association)
聚合(Aggregation):聚合关系描述的是部分与整体关系的关联,描述了“has a”的关系,汽车整车与发动机、座椅的关系
组合(Composition):组合关系是一种更强形式的关联,整合控制成员的生命周期,如公司与部门的关系。
依赖
类一方的改动将引起另一方的变动。这是一种典型的临时关系,代表了类之间的一种短暂的交互。依赖关系在Java语言中体现为局部变量、方法的参数或者对静态方法的调用,如工具类,现实生活中人与锤子。
依赖用虚线箭头,箭头指向依赖的类。
泛化
泛化定义了一般元素和特殊元素之间的分类关系,如果从面向对象程序设计语言的角度来说,类与类之间的泛华关系就是平常所说的类之间的继承关系。如人与男人和女人的关系。
使用空心箭头标识泛化,箭头指向基类。
实现
实现是一种类与接口的关系,表示类是接口所有特征和行为的实现。
实现用带三角箭头的虚线表示,箭头指向接口。
关联
关联关系是类与类之间的联接,它使一个类知道另一个类的属性和方法,关联可以是双向的,也可以是单向的。双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。在Java中,关联关系是通过使用成员变量来实现的。如人与身份证。
自关联
聚合
聚合关系是关联关系的一种,是更强的关联关系。
聚合是整体和部分之间的关系,例如汽车由引擎、轮胎以及其它零件组成。
聚合关系也是通过成员变量来实现的。但是,关联关系所涉及的两个类处在同一个层次上,而聚合关系中,两个类处于不同的层次上,一个代表整体,一个代表部分。
组合
UML类图关系中合成关系是关联关系的一种,是比聚合关系还要强的关系。
代表整体的对象负责代表部分对象的生命周期。
多重性
关联关系的多重性,在UML中,多重性可以用下面的格式表示:
0...1
0..*(也可以表示为0..n)
1(1..1的简写)
1..*(也可以表示为1..n)
*(即0..n)
7
3,6..9
0(0..0的简写)(表示没有实例参与关联,一般不用)
可以看到,多重性是用非负整数的一个子集来表示的。