UML类图类之间的关系

1.依赖关系(Dependency) 带箭头的虚线 <----
由依赖的一方指向被依赖的一方,注意理解

在这里插入图片描述
总结一下:PersonServiceBean中
一个PersonDao的私有变量,(类中的成员属性);
一个save方法,里面参数是Person,(方法接收的参数类型);
一个IDCard方法,(方法的返回类型);
一个modify方法,里面有Department,(方法中使用到的);
2.泛化关系也就是继承关系(Generalization) 带空心三角形的实线 <|——
在这里插入图片描述
是依赖关系的特例,为什么这样说,是因为student和teacher都用到了person的方法,(是可以选择继承的,接口是全部继承,这里可以看ISBN 978-7-302-48831-6 教材P126面的缺省适配器加已理解)。
如何实现:这个关系应该都很熟悉,就是extends继承父类。
3.实现关系(Realization) 带空心三角形的虚线 <|—
在这里插入图片描述
是依赖关系的特例,原因继承关系,实现了接口Vehicle的move方法
如何实现:这个也都很熟悉,implements
4.关联关系(Association) 带箭头的实线 <——
在这里插入图片描述
是依赖关系的特例,原因:将JButton类作为LoginForm类的属性。这条符合依赖关系,ISBN 978-7-302-48831-6 教材P121图9-3有个关联关系,线上的是adaptee说明他在Adapter类中用Adaptee定义了一个adaptee变量属性。
如何实现:自己想想要如何产生关联?
在这里插入图片描述
双向关联不打箭头,两个类互相将对方作为自己的属性,有点难理解,貌似没遇到过例子,看样子是那种一个学生选多门课程和一门课程让多名学生选的多对多关系,这张图是顾客和产品的关系。后面的单向关联和自关联,可以自己理解了。
5.聚合关系(Aggregation) 带空心菱形的实现 o——
在这里插入图片描述
表示整体与部分的关系,可以分开的
是关联关系的特例,原因是:Car中将Engine作为自己的私有属性,Car的构造方法也用到了Engine 。
如何实现:在代码实现聚合关系时,成员对象通常作为构造方法、Setter方法或业务方法的参数注入到整体对象中。(不知道是不是依赖注入原则,应该是,这里构造注入和设置注入就用到了)
在这里插入图片描述

6.组合关系(Composition) 带实心菱形的实线 ·——
表示整体与部分的关系,不可以分开的,同生共死。
在这里插入图片描述
注意组合关系没有setter方法,(setter和getter是泛称,比如聚合关系里的,setEngine和未写出的getEngine)
聚合关系的构造方法里写的是赋值语句,组合关系里写的是实例对象的语句,这是不同。
组合关系也是关联关系,是比聚合关系还要强的一种组合关系。
如何实现:在代码实现组合关系上,通常由在代表整体的类的构造方法中直接初始化代表部分的类。

Eg:学生时代忘记带作业,老师总是质问你怎么没有忘记把脑子带来,现在你可以反驳说 Student 和 HomeWork 是可以分开的聚合关系,而 Student 和 Head 是不可以分开的组合关系;这句话能看懂说明你差不多理解了聚合和组合关系。
组合关系的耦合性比聚合关系的耦合性高,
Eg:ISBN 978-7-302-48831-6 教材P123面的组合关系,PoliceCarAdapter里面的构造方法就是直接初始化代表部分的类。

总结:
各种关系的耦合强度:
泛化(继承) > 实现 > 组合 > 聚合 > 关联 > 依赖
根据高内聚,低耦合原则,应该慎用继承
何为耦合关系:
耦合(Couping)是模块之间相关联程度的度量。相对于聚合的内向性,耦合关注的是某一模块和其他模块之间的关联性。简言之就是类与类之间的关系,是复杂的互用还是单一的调用。
在这里插入图片描述
我们想用一个已存在的公共代码,第一反应肯定是去继承,隐患是:父类改变,子类也要改,因为你是继承的。
解决办法:使用组合关系,在你的类中用公共类作为你的属性。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值