类图中的6大关系



类图中的6大关系


1. 依赖关系(Dependency)

如果在一个A类中用到了另一个B类,那么就说A类依赖B类。类图表示如下:
在这里插入图片描述

只要B类满足下面条件中的任意一个,就说A类依赖B类:

  1. A类中用到了B类
  2. A类中有B类型的成员变量
  3. B类是A类方法的返回类型
  4. B类是A类方法的参数类型
  5. A类的方法中用到了B类

2. 泛化关系(generalization)

泛化关系可以说是继承关系,是依赖关系的特例。

用类图表示:
在这里插入图片描述

3. 实现关系(Implementation)

B类实现了A接口,就说A接口和B类之间有实现关系,实现关系是依赖关系的特例。

用类图表示:

在这里插入图片描述

4. 关联关系(Association)

关联关系表示的是类与类之间的联系,例如:

class Person {
    private IdCard idCard;
}
class IdCard {
    
}

在上面的代码中,Person和IdCard就是单向一对一的关系。
在这里插入图片描述

又如:

class Person {
    private IdCard idCard;
}
class IdCard {
    private Person person;
}

在上面的代码中,我们说Person和IdCard是双向一对一的关系。

5. 聚合关系(Aggregation)

聚合关系表示的是整体和部分的关系,整体和部分是可以分开的,它是关联关系的特例。可以将聚合关系比喻为班级这样一个概念,班级由学生组成,学生可以和班级分开,离开了班级依然能够独立存在。

class Computer {
    //Computer和Monitor、Mouse是可以分离的
    private Monitor monitor;
    private Mouse mouse;

    public Computer(Monitor monitor, Mouse mouse) {
        this.monitor = monitor;
        this.mouse = mouse;
    }

}

class Monitor {
    

}

class Mouse {

}

上面的例子中,创建一个 Computer 示例需要传入一个 Monitor 实例以及一个 Mouse 实例,至于 Monitor 和 Mouse 实例在什么地方创建,什么时候创建的,和 Computer 没有关系,Computer 和 Monitor、Mouse 没有共同的生命周期。Computer 实例被销毁,Monitor 和 Mouse 实例也有可能没有销毁,因为他们是外界传入的。

用类图表示:
在这里插入图片描述

6. 组合关系(Composite)

和聚合关系类似,组合关系关系也是用来描述整体和部分的关系,但是,它规定了部分和整体是不能分开的。可以将组合关系比喻成人和大脑、心脏的关系,在人出生的时候,必须有健康的大脑和心脏,人和大脑、心脏是患难与共的,人没了,大脑也没了。

class Computer {
    //Computer这个整体和Monitor、Mouse这两个部分是不能分离的
    private Monitor monitor = new Monitor();
    private Mouse mouse = new Mouse();
	
	public Computer(){
		monitor = new Monitor();
		mouse = new Mouse();
	} 
}

class Monitor {
    

}

class Mouse {

}

在上面的例子中,创建 Computer 实例时,就创建了 Monitor、Mouse 实例,Computer 实例和 Monitor、Mouse 实例就连为一体了,Computer 实例被销毁了,Monitor、Mouse 实例也就没了。

用类图描述:
在这里插入图片描述

7. 总结

实现关系和泛化关系很好理解,对应于java中的实现和继承。而依赖、关联、聚合、组合这四种关系都是语义级别的,所以从代码层面并不能完全区分各种关系,但总的来说,后几种关系所表现的强弱程度依次为:组合>聚合>关联>依赖。

  • 32
    点赞
  • 184
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值