目录
类图
类与接口的表示
类
属性及方法可见性:
-
public 用
+
表示 -
private 用
-
表示 -
protected 用
#
表示 -
package 用
~
表示
接口
接口名须以尖括号包裹、无属性框、方法可见性只可能为public
,这是由接口本身的特性决定
类间关系
依赖关系
A依赖于B:
-
B类的实例作为A类方法的参数
-
B类的实例作为A类方法的局部变量
-
A类调用B类的静态方法
关联关系
双向关联
双向关联的类的实例,互相持有对方的实例,并且可在关联线上注明二者的关系,必须同时注明两种关系(如上图中的manage和managed by)
单向关联
A指向B:A中的成员变量有类B的对象
自关联
自关联是指属性类型为该类本身,例如在链表中,每个节点持有下一个节点的实例
多重性关联
表示方式 | 多重性说明 |
---|---|
1..1 | 另一个类的一个对象只与该类的一个对象有关系 |
0..* | 另一个类的一个对象只与该类的零个或多个对象有关系 |
1..* | 另一个类的一个对象与该类的一个或多个对象有关系 |
0..1 | 另一个类的一个对象与该类的对象没关系或者只与该类的一个对象有关系 |
m..n | 另一个类的一个对象与该类最少m,最多n个对象有关系 |
例如一个网页可能没有可点击按钮,也可能有多个按钮,但是该页面中的一个按钮只属于该页面,其关联多重性如下图所示
聚合关系
聚合关系由带箭头的实线表示,并且实线的起点处以空心菱形表示。
聚合(Aggregation)关系表示整体与部分的关系。在聚合关系中,部分对象是整体对象的一部分,但是部分对象可以脱离整体对象独立存在,也即整体对象并不控制部分对象的生命周期。从代码实现上来讲,部分对象不由整体对象创建,一般通过整体类的带参构造方法或者Setter方法或其它业务方法传入到整体对象,并且有整体对象以外的对象持有部分对象的引用。
组合关系
组合关系中整体对象控制成员对象的生命周期,一旦整体对象不存在了,成员对象也即随之消亡
一般在整体类的构造方法中直接实例化成员类,并且除整体类对象外,其它类的对象无法获取该对象的引用
实线以实心菱形表示
泛化关系/继承关系
用于描述父类与子类之间的关系,父类和子类都可为抽象类或者具体类
泛化关系用带空心三角形(指向父类)的实线表示。并且子类中不需要标明其从父类继承下来的属性和方法,只须注明其新增的属性和方法即可。
实现关系
类实现了接口中声明的方法
类与接口间的实现关系用带空心三角形的虚线表示。类中需要列出接口中所声明的所有方法(这一点与类间的继承关系表示不同)。
区分
1. 聚合关系与组合关系都表示整体与部分的关系,有何区别?
聚合关系中,部分对象的生命周期独立于整体对象的生命周期,或者整体对象消亡后部分对象仍然可以独立存在,同时在代码中一般通过整体类的带参构造方法或Setter方法将部分类对象传入整体类的对象,UML中表示聚合关系的实线以空心菱形开始。
组合关系中,部分类对象的生命周期由整体对象控制,一旦整体对象消亡,部分类的对象随即消亡。代码中一般在整体类的构造方法内创建部分类的对象,UML中表示组合关系的实线以实心菱形开始。
同时在组合关系中,部分类的对象只属于某一个确定的整体类对象;而在聚合关系中,部分类对象可以属于一个或多个整体类对象。
2. 聚合关系、组合关系与关联关系有何区别和联系?
聚合关系、组合关系和关联关系实质上是对象间的关系(继承和实现是类与类和类与接口间的关系)。
从语意上讲,关联关系中两种对象间一般是平等的,而聚合和组合则代表整体和部分间的关系。
聚合与组合的区别主要体现在实现上和生命周期的管理上。
3. 依赖关系与关联关系的区别是?
依赖关系是较弱的关系,一般表现为在局部变量中使用被依赖类的对象、以被依赖类的对象作为方法参数以及使用被依赖类的静态方法。
关联关系是相对较强的关系,一般表现为一个类包含一个类型为另外一个类的属性。