目录
类图
类图主要是用来显示系统中的类、接口以及它们之间的静态结构和关系的一种静态模型。 常用来描述系统中所包含的类以及它们之间的相互关系,帮助人们简化对系统的理解。
类
类名Dog
- 代表 public 公共,- 代表 private 私有,# 代表 protected
- 成员变量类型写在前,参数名称写在后
- 两个类之间若存在关系,可使用箭头进行关联,具体关联规则在下文介绍
类间关系
类与类之间主要有 6 种关系,这些关系在 java 代码中的体现总结下,他们的耦合度依次增强:
(1) 依赖关系:关系对象出现在局部变量或者方法的参数里,或者关系类的静态方法被调用
(2) 关联关系:关系对象出现在实例变量中
(3) 聚合关系:关系对象出现在实例变量中
(4) 组合关系:关系对象出现在实例变量中
(5) 泛化关系: extends
(6) 实现: implements
1、依赖(Dependency)
具体理解:类A使用类B(关系具偶然性、临时性、动态性)
场景举例:
场景一:学生用笔写字,【学生】这个类要实现write()这个方法必须依赖【笔】这个类,但用笔写字这个关系具动态性、偶然性
场景二:出租车司机,每天开着公司分配的车去载客,而每天出租车可能不同。 我只是个司机,公司给我什么车我就开什么车,我使用这个车。
类图表示:
箭头指向:带箭头的虚线,指向被使用者
Java代码:
class Driver{
public void drive(Car car){
car.run();
}
}
class Car{
public void run(){}
}
依赖关系的三种表现形式:
class Driver{
//通过形参方式发生依赖关系
public void drive1(Car car){
car.run();
}
//通过局部变量发生依赖关系
public void drive2(){
Car car=new Car();
car.run();
}
//通过静态变量发生依赖关系
public void drive3(){
Car.run();
}
}
2、关联(Association)
具体理解:两个独立对象的一些特定实例存在固定的对应关系(关系具偶然性,一般是长期性)
单向关联:类 A 当中使用了类 B,其中类 B 是作为类 A 的成员变量。
双向关联: 类 A 当中使用类 B 作为成员变量,同时类 B 中也使用了类 A 作 为成员变量。
场景举例:
我是一名老司机,车是我自己的,我拥有这辆车,平时也会用这辆车去载客人。
类图表示:
箭头指向:带普通箭头的实心线,指向被拥有/使用者
3、聚合(Aggregation)
关联关系的对象间是相互独立的,而聚合关系的对象之间存在着包容关系,他们之间是“整体-个体”的相互关系。
聚合关系中作为成员变量的类一般使用 set 方法赋值。
如下类图所示,司机通过set车,可以set很多辆车。
箭头指向:带空心菱形的实心线,菱形指向整体
4、组合 (Composition)
相比于聚合,组合是一种耦合度更强的关联关系。存在组合关系的类表示“整体-部分”的关联关系,“整体”负责“部分”的生命周期,他们之间是共生共死的;并且 “部分”单独存在时没有任何意义。
场景举例:
车是一辆私家车,是司机财产的一部分,强调的是人财产的部分性,则相同的代码即可表示组合关系。 车是司机必须有的财产,要想成为一个司机必须要现有财产,车要是没了,司机也不想活了。而且司机要是不干司机了,这车也就没了。
箭头指向:带实心菱形的实线,菱形指向整体
5、泛化(Generalization)
是一种继承关系, 表示一般与特殊的关系, 它指定了子类如何特化父类的所有非 private 修饰的特征和行为,比如说人有男人和女人,男人和女人即有共性的地方也有差异的地方
箭头指向:带三角箭头的实线,箭头指向父类
6、实现(Realization)
实现和我们 java 中的实现是一个意思,是一种类与接口的关系, 表示类是接口所有特征和行为的实现。
箭头指向:带三角箭头的虚线 ,箭头指向接口
实例解析
画出动物(定义为接口)、人、车、轮胎、司机、公路、停车场、汽油、加油站、4s 店等的类图