前言
让时光积累真正的价值
最近一直会看到一些类图,大概是类图看得少的原因,很多连线我都不知道什么意思。需要经常要来回百度。为了节约看UML类图的时间,我记录这一篇笔记,供自己参考。
怎样分辨类和类之间的关系
类图与类图之间的连线代表了类之间的关系。基本上有6种连线。
简便起见,就不使用真正的类图了,使用矩形代替。
泛化关系——实线空心三角形箭头
说白了就是继承关系,B类继承A类,B与A就有泛化关系
在Java中,继承关系常常表现为extends关键字
interface A{
...
}
class B extends A{
.......
}
实现关系——虚线空心三角形箭头
简单的来说就是一个类实现了另外一个类的接口。
在Java中实现关系常常表现为implements关键字
class A{
...
}
class B implements A{
.......
}
依赖关系——虚线箭头:
表示依赖,箭头指着被依赖的实体(依赖,一个节点是另外一个节点的一部分)
在Java中,依赖关系常常表现为局部变量,方法的参数等等
class A{
...
}
class B {
//方法A依赖类A
public void methodA(A a){
.........
}
}
关联关系——实线箭头:
关联,表示对象与对象之间的连接。关联关系使得一个对象知道另外一个对象的的属性和方法。
在Java中,关联关系常常使用实例变量(类属性)来表示
class A{
...
}
class B {
private A a;
.......
}
聚合关系——空心菱形+实线+箭头
聚合关系是关联关系的特例,是强的关联关系,是个体和整体的关系。
注意:个体和整体是独立可分离的。比如部门和员工(员工可以脱离部门独立)
在java聚合关系也是使用实例变量来表示,一般会使用一个集合来装载个体(一对多关系)。
class A{
...
}
class B {
private List<A> aArray;
.......
}
组合关系——实心菱形+实线+箭头
聚合关系可以看作是聚合关系的强化版,个体是不能脱离整体独立存在,就像人和手的关系。
不能用从语法上直接区分聚合关系和组合关系,只能从对象间的逻辑关系来区分。
补充说明
泛化关系和实现关系很常见,也很容易辨认出来。依赖关系、关联关系、聚合关系、组合关系之间的耦合程度依次提高。
怎么画UML类的实体
一般来说,常用的类图有有两种,一种是接口的类图,另外一是普通类图
普通类类图
类图分有三个方格,不同的方格表示不同的内容。
第一个方格——类名
第二个方格——类的属性
这里有很多行,每一行对应的一个属性
+ attribute1:type = defaultValue
第一个“+”的位置用来表示属性的可见性。其中:
“+”对于的是public
“-”对应的是private
“#”对应的是protected
attribute1表示属性的名字
type对应的是属性的类型
第三个方格——类的方法
跟属性类似,一行表示一个方法,方法的可见性同样使用“+”、“-”、“#”来表示。
方法的括号中需要加上参数列表
接口类图
接口类中是没有属性的,和普通的类图相比,接口的类图就是把第二个方格删除掉。