0. 简介
UML 中文翻译为统一建模语言,其实说白了 UML 就是将软件的各种状态以图表的方式展现出来.因为 UML 涉及的图表非常的多,这里只介绍比较重要的类图,时序图,用例图,为了加深读者的理解,这里会使用 StarUML 来讲解.
1. 类图
1.1 概念
类图就是表示系统中包含了哪些实体,各实体之间如何关联的.
1.2 类图组成
从概念就可以知道类图其实就是由两部分组成的,一个是实体,另一个就是关联.关联会在下一篇文章讲解,这篇文章先讲解实体.
1.2.1 类图实体
类图实体的意思其实就是表示在 UML 当中怎么表示一个类.例如,现在有一个 Dog 类,代码如下:
如果用类图表示如下图:
public class Dog {
private int age;
private String name;
public void printInfo() {
System.out.println("name: " + name + " " + "age: " + age);
}
}
Dog
一个类的类图就是由类名,属性和方法组成的,现在来介绍一下这些元素的细节.
1.2.1.1 类名
在 StartUML 中,如果双击类名会看到右边的控制面板出现下图的表格:
Class Properties
这个就是描述当前类的值,那它们分别代表什么意思呢?以下一个个解释.
(1)stereotype:这个中文翻译也叫构造型,其实就是对类的概念的精化.简单的说加一句话来更加清楚准确描述这个类.
现在往 stereotype 添加 Animal,看看类图会发生什么变化?
stereotype
可以发现在类名 Dog 上面会出现 <> ,因为在 UML 当中构造型(Stereotype)就是用 <<>> 符号来表示.
(2)visibility:这个是可见性的意思,这里一共有四个选项,分别是 public,protected,private,package.不过你无论选什么选项类图都不会有什么变化的,不过要注意的是 Java 中只能使用 public 和 package 来修饰类.
(3)isAbstract:顾名思义,这个选项就代表是否为抽象类.如果选上这个选项类名就会变成斜体字,如图:
isAbstract
(4)isFinalSpecialization:是否为 final 类,如果选上这个选项,类图并没有什么变化.
(5)isLeaf:其实这个的意思和 isFinalSpecialization 基本上都是一样的,都代表选上都代表这个类为 final 类.如果选上这个选项类图会有如下变化.
isLeaf
可以看到类名的右下角出现 {leaf}.
(6)isActive:是否为活动对象.那什么是活动对象呢?活动对象就是可以主动的启动某些流程,而被动对象就是要其他对象来调用它.如果选上这个选项类图会有如下变化:
isActive
可以看到类图左右两边加多了一条线.
1.2.1.2 属性
Attribute Properties
有些选项与类名的选项是一样的,这里就不重复讲解了,说一些类名没有或特有的属性.
访问控制符 UML 符号
(1) visibility:有些人可能会问了,类名那一节不是已经说了这个属性吗?为什么还要说.没错,类名那里确实说过了,而且这个属性的值和类名也是一样的,但是在这里如果选不同的选项,类图是会有相应不同的变化的.
public+
protected#
private-
package~
visibility
看上图,可以知道选择不同访问控制符,age 前的符号是不一样的,总结如下表:
访问控制符 UML 符号
(2)isStatic:是否为静态.如果选择了这个选项后,类图会有如下变化
public+
protected#
private-
package~
isStatic
age 属性下面会出现一道横线.
(3)type:代表该属性的类型
(4)multiplicity:这个代表该类实例与其他类实例连接时所需要的数量范围.这里有几种表达方式,总结如下表:
符号 说明
0..1 零个或一个
1 一个
0..* 零个或多个
1..* 一个或多个
* 多个
如果选择了 0..1 选项类图就会变成如下图:
multiplicity
age 后面就会出现 [0..1] .
(5)isReadOnly:代表只能读取.选择了这个选项类图会有如下变化:
isReadOnly
在属性的后面会出现 {readOnly}
(6)isOrdered:如果选择了 multiplicity,在选择了 isOrdered.证明这个属性多个值是按某种特殊排序法排序的,选择了这个选项类图会有如下变化:
isOrdered
在属性的后面会出现 {ordered}
(7)isUnique:如果选择了 multiplicity,在选择了 isOrdered.证明这个属性多个值是否唯一,选择了这个选项类图会有如下变化:
isUnique
在属性的后面会出现 {unique}
(8)defaultValue:默认值,设置的话,类图会有如下变化:
defaultValue
会在 age 后面 增加了 "= 18" 符号.
(9)isDerived:代表这个值是否由其他模型计算出来的.选择了这个选项类图会有如下变化:
isDerived
可以看到会在 age 前增加 "/" 符号.
(10)aggregation:这里面有三个选项如下图:
aggregation
类型 作用
none 不设置聚合状态
shared 可以独立存在
composite 没有这个属性,整个类就不能存在
设置了这几个值类图并不会有什么变化.
(11)isID:代表这个属性值是否是这个类实例的唯一标识码.选择了这个选项类图会有如下变化:
isID
可以看到会在 name 属性后面增加 "{id}" 符号
1.2.1.3 方法
Opeartion Properties
(1)raisedExeptions:添加可能会引发的异常.
这里我定义了一个 MyException 类,然后在 printInfo() 方法中添加异常,添加后如图所示:
raisedExeptions
添加后,类图并不会有变化.
(2) concurrency:代表这个方法的并发性,这里有三个选项,作用下表总结:
concurrency
类型 作用
sequential 按顺序执行
guarded 后台执行
concurrent 并发执行
改变后,类图并不会有变化.
(3)isQuery:代表此方法如果并没有改变系统的状态.选择了这个选项类图会有如下的变化:
isQuery
会在 printInfo() 方法后出现"{query}" 符号
(4)specification:对这个方法的作用进行说明
增加内容后,类图并不会有变化.
基本上我们平常能用到的类图实体的元素都讲解的差不多了,下一篇文章我们继续讲解类图关联.
参考书籍与文章:
《UML 和模式应用》 《大象:Thinking in UML》 在 Java 中保留 Stereotype Active class versus passive class 快速上手 UML 類別圖的初級概念:類別(一) Composite Vs Shared UML Operation
来源: http://www.jianshu.com/p/3c86eb617763