作为开发无论在学习还是在工作中总会接触到UML类图。如果对UML类图不是很了解,会发现会有诸多不便,比如理解的不够深刻,脑子里没有整体的架构等等。
远的不说就说最新在学习设计模式,我发现每个设计模式都会有一个UML类图,当然不看类图我们也能去理解那些设计模式。但是,如果能读懂UML类图,它会便于帮助我们去理解和记忆那些设计模式,甚至帮助我们在工作的时候做设计或架构时更加灵活的去运用那些设计模式。所以说UML类图,我们必须掌握!!!
一.什么是类图
百度百科:
类图(Class diagram)是显示了模型的静态结构,特别是模型中存在的类、类的内部结构以及它们与其他类的关系等。类图不显示暂时性的信息。类图是面向对象建模的主要组成部分。它既用于应用程序的系统分类的一般概念建模,也用于详细建模,将模型转换成编程代码。类图也可用于数据建模。
概念性的东西不过多去解读,简单来说:类图描述了我们软件系统中类与类的关系。
二.如何用类图来表示类
举个栗子,首先定义平时学习最常用的Person类,代码如下:
public class Person {
private String name;
private int age = 18;
public void setName(String name) {
this.name=name;
}
public String getName() {
return name;
}
public void setAge(int age) {
this.age=age;
}
public int getAge() {
return age;
}
}
这是一个非常简单的类,它的类图如下:
从这个简单的例子我们可以看出一些大概的端倪,一个类图由三部分组成:
属性 一栏组成结构如下:
可见性 属性名:类型 [= 默认值]
其中可见性
有如下表达方式:public
、protected
、default
和 private
分别对应 +
、#
、~
和 -
。其中我们的name和age两个属性都是private
所以用 -
来表示。
操作 一栏组成结构如下:
可见性 方法名称(参数列表)[:返回类型]
这里的可见性表示方法和属性的可见性表示方法一致,至于其他字段相信你根据名称已经知道啥含义了。
三.类之间的关系
介绍完了如何用类图来表示类,接下来就要了解下类与类之间的关系。类与类之间一共有如下几种关系:泛化(Generalization)、实现(Realization/Implementation)、依赖(Dependence)、关联(Association)、聚合(Aggregation)、组合(Composition)
下面我们来对其一一解读:
1.泛化(Generalization)
【泛化关系】:是一种继承关系,表示一般与特殊的关系,它指定了子类如何特化父类的所有特征和行为。例如:老虎是动物的一种,即有老虎的特性也有动物的共性。
【箭头指向】:带三角箭头的实线,箭头指向父类
2.实现(Realization/Implementation)
【实现关系】:是一种类与接口的关系,表示类是接口所有特征和行为的实现.
【箭头指向】:带三角箭头的虚线,箭头指向接口
3.依赖(Dependence)
【依赖关系】:是一种使用的关系,即一个类的实现需要另一个类的协助,所以要尽量不使用双向的互相依赖.
【代码表现】:局部变量、方法的参数或者对静态方法的调用
【箭头及指向】:带箭头的虚线,指向被使用者
4.关联(Association)
【关联关系】:是一种拥有的关系,它使一个类知道另一个类的属性和方法; 如:老师与学生,丈夫与妻子关联可以是双向的,也可以是单向的。双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。
【代码体现】:成员变量
【箭头及指向】:带普通箭头的实心线,指向被拥有者
5.聚合(Aggregation)
【聚合关系】:是整体与部分的关系,且部分可以离开整体而单独存在。如车和轮胎是整体和部分的关系,轮胎离开车仍然可以存在。
聚合关系是关联关系的一种,是强的关联关系;关联和聚合在语法上无法区分,必须考察具体的逻辑关系。
【代码体现】:成员变量
【箭头及指向】:带空心菱形的实心线,菱形指向整体
6.组合(Composition)
【组合关系】:是整体与部分的关系,但部分不能离开整体而单独存在。如公司和部门是整体和部分的关系,没有公司就不存在部门。
组合关系是关联关系的一种,是比聚合关系还要强的关系,它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期。
【代码体现】:成员变量
【箭头及指向】:带实心菱形的实线,菱形指向整体
各种关系的强弱顺序:
泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖
下面这张UML图,比较形象地展示了各种类图关系:
参考内容:
http://www.uml.org.cn/oobject/201609062.asp
https://baike.baidu.com/item/类图/4670826?fr=aladdin