在UML类图表示类的图形:
表示类的图形有三层:
- 第一层是类名字;
- 第二层是类的成员变量;
- 第三层是类的方法。
成员变量以及方法前的访问修饰符用符号来表示:
- “+”表示 public
- “-”表示 private
- “#”表示 protected
- 不带符号表示 default
注意:
如果是抽象类和抽象方法,那么用斜体字体表示
在UML类图表示接口:
接口在类图中的第一层顶端用构造型 <>表示,下面是接口的名字,第二层是字段常量,第三层是抽象方法。(如果用两层表示,那就只是表示接口名和方法)。
第二种表示接口的方法是“棒棒糖表示法”:
类上面的一根棒棒糖(圆圈+实线)。圆圈旁为接口名称,接口方法在实现类中出现。
在UML类图中表示包:
类和接口一般都出现在包中,UML类图中包的表示形式如下图所示。package表示包名。
在UML类图中表示关系:
继承(泛化):
泛化关系(Generalization)是指对象与对象之间的继承关系。如果对象A和对象B之间的“is a”关系成立,那么二者之间就存在继承关系,对象B是父对象,对象A是子对象。例如:一只大雁“is a” 动物,很显然,大雁是和动物是继承关系。
实现:
实现关系是指接口及其实现类之间的关系,实现关系用空心三角和虚线组成的箭头来表示,从实现类指向接口
关联:
关联关系(Association)是指对象和对象之间的连接,它使一个对象知道另一个对象的属性和方法。
在Java中,关联关系的代码表现形式为一个对象含有另一个对象的引用。也就是说,如果一个对象的类代码中,包含有另一个对象的引用,那么这两个对象之间就是关联关系。
关联关系有单向关联和双向关联。
双向关联:如果两个对象都知道(即可以调用)对方的公共属性和操作,那么二者就是双向关联。
单项关联:如果只有一个对象知道(即可以调用)另一个对象的公共属性和操作,那么就是单向关联。
大多数关联都是单向关联,单向关联关系更容易建立和维护,有助于寻找可重用的类。
一个对象可以持有其它对象的数组或者集合,在UML中,通过放置多重性(multipicity)表达式在关联线的末端来表示。多重性表达式可以是一个数字、一段范围或者是它们的组合。多重性允许的表达式示例如下:
- 数字:精确的数量
- *或者0..*:表示0到多个
- 0..1:表示0或者1个,在Java中经常用一个空引用来实现
- 1..*:表示1到多个
关联关系又分为依赖关联、聚合关联和组合关联三种类型。
依赖:
如果对象A用到对象B,但是和B的关系不是太明显的时候,就可以把这种关系看作是依赖关系。比如说A类的方法形参用到了B类。
public class BClass{ } public class AClass{ private BClass b1; // 依赖关系情况1:成员变量. 这也是关联关系 public void doWork(BClass b2){ // 依赖关系情况2: 方法参数 } public void doWork(){ BClass b3; // 依赖关系情况3: 方法内的局部变量 } }
聚合:
- 聚合关系是关联关系的一种特例,他体现的是整体与部分,是一种“弱拥有”的关系,即has-a的关系。聚合是整体和个体之间的关系。
- 例如,汽车类与引擎类、轮胎类,以及其它的零件类之间的关系便整体和个体的关系。
- 与关联关系一样,聚合关系 也是通过实例变量实现的。但是关联关系所涉及的两个类是处在同一层次上的,而在聚合关系中,两个类是处在不平等层次上的,一个代表整体,另一个代表部分。
- 聚合关系表示整体和个体的关系,整体和个体可以相互独立存在,一定是有两个模块分别管理整体和个体。
- 在UML类图中,聚合通常使用空心菱形+实线箭头表示
组合:
- 也是整体与部分之间的关系,但是整体会影响到部分的生存周期,只要整体对象不存在了,部分对象也随之消亡。如,公司和部门、猫和猫的腿。
- 组合关系是关联关系的一种特例,他体现的是一种contains-a(包含)的关系,这种关系比聚合更强,也称为强聚合。
- 它要求普通的聚合关系中代表整体的对象负责代表部分对象的生命周期,组合关系是不能共享的。代表整体的对象需要负责保持部分对象和存活,在一些情况下将负责代表部分的对象湮灭掉。代表整体的对象可以将代表部分的对象传递给另一个对象,由后者负责此对象的生命周期。换言之,代表部分的对象在每一个时刻只能与一个对象发生组合关系,由后者排他地负责生命周期。部分和整体的生命周期一样。
- 整体和个体不能独立存在,一定是在一个模块中同时管理整体和个体,生命周期必须相同(级联)。
- 在UML类图中,组合通常使用实心菱形+实线箭头表示