类图关系:四种
1、泛化
2、实现
3、依赖
4、关联
1)单向
2)双向
3)自关联
4)聚合
5)组合
关联是一种强依赖
关联 > 依赖
代码层面:将一个类的对象作为另一个类的属性
单向关联(实线箭头)
说明
类的关联关系是单向的,单向关联用带箭头的实线表示
单向关联
代码体现
将一个类的对象作为另一类的属性
public class Customer {
public Customer() {
}
public Address address; //将一个类的对象作为另一类的属性
}
public class Address {
public Address() {
}
}
双向关联(实线双箭头或无箭头)
说明
双向关联就是双方各自持有对方类型的成员变量 ,都可以调用对方的公共属性和方法
双向关联
代码体现
public class Teacher {
public Teacher() {
}
public Student[] students;
}
public class Student {
public Student() {
}
public Teacher[] teachers;
}
自关联(实线箭头指向自身)
说明
一些类的属性对象类型为该类本身,这种特殊的关联关系为自关联,在链表中非常常见,单向链表Node中会维护一个它的前驱Node,双向链表Node中会维护一个它的前驱Node和一个它的后继Node。
自关联
代码体现
public class Node {
public Node() {
}
public node nextNode;
}
聚合(实线空心菱形)
聚合用来表示整体与部分之间的关联关系。表示一种弱的‘拥有’关系,即has-a的关系,体现的是整体对象包含成员对象,但成员对象不是整体对象的一部分,成员对象可以脱离整体对象独立存在,两个对象具有各自的生命周期。例如班级与学生之间存在聚合关系,外卖平台和外卖员之间也是聚合关系
参考:
https://zhuanlan.zhihu.com/p/501750430
public class DeliveryPlat {
public DeliveryPlat() {
}
public string Name;
public Deliveryman worker;
}
public class Deliveryman {
public Deliveryman() {
}
private string id;
private int age;
protected int level = 0;
public int Type = 0;
public void getGoods() {
// TODO implement here
}
/**
* @param bike
*/
public void sendGoods(Ebike bike) {
// TODO implement here
}
}
组合(实线实心菱形)
说明
组合是一种强的‘拥有’关系,是一种contains-a的关系,体现了严格的部分和整体关系,部分和整体的生命周期一样。一旦整体对象不存在,部分对象也将不存在,整体类可以控制成员类的生命周期,即成员类的存在依赖于整体类。
public class Ebike extends TrafficTool {
public Ebike() {
}
private Battery motiveE;
}
public class Battery {
public Battery() {
}
}
依赖(虚线箭头)
依赖(Dependency)关系是一种使用关系,特定事物的改变有可能会影响到使用该事物的其他事物,在需要表示一个事物使用另一个事物时使用依赖关系,大多数情况下依赖关系体现在某个类的方法使用另一个类的对象作为参数,返回值或者局部变量。若类A依赖类B,类B的实例可能存在于类A某个方法调用的函数中
关联是一个类的对象作为另个类的属性(成员函数),依赖:一个类的对象为另一个类的 成员函数:参数,返回值或者局部变量
public class Deliveryman {
public Deliveryman() {
}
private string id;
private int age;
protected int level = 0;
public int Type = 0;
public void getGoods() {
// TODO implement here
}
/**
* @param bike
*/
public void sendGoods(Ebike bike) {
// TODO implement here
bike.Move()
}
}
public class Ebike extends TrafficTool {
public Ebike() {
}
private Battery motiveE;
public void Move() {
// TODO implement here
}
}
## 泛化(实线空心箭头)
说明
泛化就是继承的关系,面向对象三大特性:封装,继承,多态。泛化体现的是面向对象三大特性中的继承。

```cpp
public class TrafficTool {
public TrafficTool() {
}
public string Name;
public int Type;
}
public class Ebike extends TrafficTool {
public Ebike() {
}
private Battery motiveE;
public void Move() {
// TODO implement here
}
}
public class Bicycle extends TrafficTool {
public Bicycle() {
}
public Human motiveE;
}
实现(虚线空心箭头)
说明
接口和类之间存在一种实现关系(Realization),类实现了实现了接口类中所声明的操作。体现的是面向对象三大特性中的多态。
c++中可以理解为对抽象类的实现。
public interface aerocraft {
public void fly();
}
public class plane implements aerocraft {
public plane() {
}
public void fly() {
// TODO implement here
}
}
*/
public class rocket implements aerocraft {
public rocket() {
}
public void fly() {
// TODO implement here
}
}
泛化
实线空心箭头
泛化就是继承的关系,面向对象三大特性:封装,继承,多态。泛化体现的是面向对象三大特性中的继承。
转载:
本博客参考知乎:
https://zhuanlan.zhihu.com/p/501750430