类与类之间的关系及绘图

UML 关系图

1. 类之间的关系

1.1 单向关联关系

一个类的实例对象作为另外一个类的一个成员变量,那么这两个类之间的关系就是单向关联关系

public class LoginForm {
    private JButton loginButton;  // 定义为成员变量
}

public class JButton {}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1.2 双向关联关系

一个类的实例对象作为另外一个类的一个成员变量,反之亦然,那么这两个类之间的关系就是双向关联关系

public class Customer {
    private Product[] products;  // 定义为成员变量
}

public class Product {
    private Customer customer;  // 定义为成员变量
}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

单向关联关系使用的是引用对象的箭头;而双向关联关系使用的则是光秃秃的直线。

1.3 自关联关系

类的成员变量很有可能还是这个类的实例;这种情况在复杂的数据结构中非常常见,例如链表、树等。

public class Node {
    private Node nextNode;
}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

注意,自关联使用的也是单向箭头。

1.4 多重性关联

表示的是两个类数量关系之间的关系。

表示方式说明
1…1一对一关系
0…*0 对多关系
1…*1 对多关系
0…10 对 1 关系
m…n多对多关系
public class Form {
    private Button[] buttons; // 定义一个集合对象
}

public class Button {}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1.5 聚合关系

聚合关系表示的是整体和部分之间的关系,在这种关系中成员对象是整体对象的一部分,但是需要额外注意的是成员对象可以脱离整体对象存在,由于可以脱离,所以用空心菱形表示,可以理解为不坚固。

举个例子,电脑和电脑中可以拔出来使用的内存条是聚合关系。

public class Car {
    private Engine engine;
    public Car(Engine engine) {
        this.engine = engine;
    }

    public void setEngine(Engine engine) {
        this.engine = engine;
    }
}

public class Engine {
    ....
}

上述代码所展示的是聚合关系和注入的密切关系,注入的方式可以分成构造注入设值注入

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

聚合关系中,空心菱形所在的是整体;箭头所指的地方是部分。
在上面的代码中表示的是发动机和汽车之间的聚合关系;汽车报废了,发动机还可以拆下来使用。

1.6 组合关系

组合关系表示的也是整体和部分之间的关系,但是在组合关系中:整体可以控制成员对象(也就是部分)的生命周期,也就是说,一旦整体不存在了,那么部分也就消失了,它们之间具有同生共死的关系,在 UML 中,组合关系使用带一端实心菱形,一端直线表示;注意这里不是箭头,而是直线。

实心菱形可以看成是焊死了。

public class Head {
    private Mouth mouth;
    public Head() {
        mouth = new Mouth();
    }
}

public class Mouth {

}

简单来说,实例如果是注入的,那就是聚合关系;如果是在对象中现生成的,那就是组合关系。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

显然,没有头了,就没有嘴巴了,很简单。

总结

类与类之间最常见的是关联关系,从一个角度可以分成:单关联、双向关联和自关联;从另外一个角度可以分成:聚合和组合关系。

tips:
在绘制类图的时候,属性成员前面是 - ; 方法前面是 + ; 构造函数是不用写返回值,而不是返回值为 void.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值