UML类图五种关系与代码的对应关系
发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,五种关系的耦合强弱比较:依赖<关联<聚合<组合<继承一、依赖关系:1.说明:虚线+剪头,可描述为Use a依赖是类的5种关系中耦合最小的一种关系,因为在生成代码的时候,这两个关系类都不会增加属性2.依
千家信息网最后更新 2025年01月31日UML类图五种关系与代码的对应关系
依赖是类的5种关系中耦合最小的一种关系,因为在生成代码的时候,这两个关系类都不会增加属性
2.依赖关系图与代码的对应关系
3.思考
Animal类是如何使用Water类的呢?或者说依赖关系到底是如何体现的呢?
注意2:持有water类的是animal的一个方法而不是animal类
1.说明:
实线+箭头 可以描述为has a
关联关系用实线,表示类之间的耦合度比依赖强。在生成代码的时候,关联关系的类会增加属性
2.关联关系和代码的对应关系
3.关联的种类
关联有单向关联和双向关联
单向关联:water类和Climate类单向关联,则water类称为源类,Climate类称为目标类。源类了解目标类的所有属性和方法,但目标类并不了解类的信息
双向关联:源类和目标类互相了解彼此的信息,如将water类和Climate类之间改为双向关联
4.思考:
依赖关联和关联关系的区别在哪里?
(1)从类的属性是否增加的角度看:
发生依赖关系的两个类都不会增加属性,其中的一个类作为另一个类的方法的参数或者返回值,或者是某个方法的变量而已。
发生关联关系的两个类,其中的一个类称为另一个类的属性,而属性是一种更为紧密的耦合,更为长久的持有关系。
(2)从关系的生命周期角度看:
依赖关系是仅当类的方法被调用时而产生的,伴随着方法的结束而结束了。
关联关系是当类实例化的时候即产生,当类销毁的时候,关系结束。相对依赖来说,关联关系的生存周期更长
5.关联关系的细化:聚合和组合
(1)聚合:用空心菱形+箭头
组合:用实心菱形+箭头,类之间的耦合比聚合强
(2)聚合和组合生成的代码
(PS:此图表明雁群类是由大雁类聚合而成)
(PS:此图表明大雁类是由翅膀类组合而成)
聚合类的构造函数中包含了另外一个类作为参数,GooseGroup的构造函数中用到Goose作为参数传递进来,Goose可以脱离GooseGroup独立存在
组合类的构造函数中包含了一个类的实例化,表明大雁类在实例化之前,一定要先实例化Wings类,这两个类紧密的耦合在一起,同生共灭。wings类是不可以脱离大雁类独立存在的
(4)信息的封装性不同
聚合关系中,客户端可以同时了解GooseGroup和大雁类,因为他们是独立的
在组合关系中,客户端只认识大雁类,根本就不知道wings类的存在,因为wings类被封装在Goose类中
三、泛化
1.说明:
实线+箭头 可描述为is a
泛化也成继承,子类将继承父类的所有属性和方法,并且可以根据需要对父类进行扩展
2.泛化关系与代码的对应关系
PS:Bird类继承了animal类
(1)子类继承父类,真的是继承了父类的所有属性和方法吗?
子类确实继承了父类的所有属性和方法,只是对于父类的私有类型成员没有访问权限
(2)泛化和继承是一回事吗?
子类继承父类,父类泛化子类,不同角度来解释而已
(3)为什么药多用组合少用继承?
组合和继承各有优缺点。
类继承是在编译时刻静态定义的,且可直接使用,类继承可以较方便的改变父类的实现,但是类继承也有一些不之处。首先,因为继承在编译时刻就定义了,所以无法再运行时刻改变父类继承的实现。更糟的是,父类通常至少定义了子类的部分行为,父类的任何改变都可以影响子类的行为,如果继承下来的实现不适合解决新的问题,则父类必须重写或被其他更适合的替换。这种依赖关系限制了灵活性并最终限制了复用性。
组合是通过获取对其他对象的引用而在运行时刻动态定义的,由于组合要求具有良好定义的接口,而且,对象只能通过接口访问,所以我们并不破坏封装性;只要类型一致,运行时刻还可以用一个对象来替代另一个对象;更进一步,因为对象的实现是基于接口写的,所以实现上存在较少的依赖关系。
四、实现
1.说明:
虚线+箭头
PS:Win的Goose类实现IFly接口
是一种特殊的抽象类,这种抽象类中值包含常量和方法的定义,而没有变量和方法的实现
五种关系的耦合强弱比较:依赖<关联<聚合<组合<继承
一、依赖关系:
依赖是类的5种关系中耦合最小的一种关系,因为在生成代码的时候,这两个关系类都不会增加属性
2.依赖关系图与代码的对应关系
- Public class Animal()
- {
- Public Animal(){}
- }
- Public class Water()
- {
- public Water(){}
- }
3.思考
Animal类是如何使用Water类的呢?或者说依赖关系到底是如何体现的呢?
- water类是全局的,则animal类可以调用它
- water类是animal类的某个方法中的变量,则animal类可以调用它
- Public class Animal {
- Public void Grownup() {
- Water water =null;
- }
- }
注意2:持有water类的是animal的一个方法而不是animal类
- water类是作为animal类中某个方法的参数或者返回值
- Public Animal {
- Public Water Grownup(Waterwater) {
- return null;
- }
- }
1.说明:
实线+箭头 可以描述为has a
关联关系用实线,表示类之间的耦合度比依赖强。在生成代码的时候,关联关系的类会增加属性
2.关联关系和代码的对应关系
- Public class Water {
- public Climate m_Climate;
- public Water(){}
- }
- Public class Climate {
- public Climate() {}
- }
3.关联的种类
关联有单向关联和双向关联
单向关联:water类和Climate类单向关联,则water类称为源类,Climate类称为目标类。源类了解目标类的所有属性和方法,但目标类并不了解类的信息
双向关联:源类和目标类互相了解彼此的信息,如将water类和Climate类之间改为双向关联
- Public class Water {
- public Climate m_Climate;
- public Water(){}
- }
- Public class Climate {
- public Water m_Water;
- public Climate() {}
- }
4.思考:
依赖关联和关联关系的区别在哪里?
(1)从类的属性是否增加的角度看:
发生依赖关系的两个类都不会增加属性,其中的一个类作为另一个类的方法的参数或者返回值,或者是某个方法的变量而已。
发生关联关系的两个类,其中的一个类称为另一个类的属性,而属性是一种更为紧密的耦合,更为长久的持有关系。
(2)从关系的生命周期角度看:
依赖关系是仅当类的方法被调用时而产生的,伴随着方法的结束而结束了。
关联关系是当类实例化的时候即产生,当类销毁的时候,关系结束。相对依赖来说,关联关系的生存周期更长
5.关联关系的细化:聚合和组合
(1)聚合:用空心菱形+箭头
组合:用实心菱形+箭头,类之间的耦合比聚合强
(2)聚合和组合生成的代码
(PS:此图表明雁群类是由大雁类聚合而成)
- Public class GooseGroup {
- public Goose goose;
- Public GooseGroup(Goose goose) {
- this.goose = goose;
- }
- }
(PS:此图表明大雁类是由翅膀类组合而成)
- Public class Goose {
- public Wings wings;
- public Goose() {
- wings = new Wings();
- }
- }
聚合类的构造函数中包含了另外一个类作为参数,GooseGroup的构造函数中用到Goose作为参数传递进来,Goose可以脱离GooseGroup独立存在
组合类的构造函数中包含了一个类的实例化,表明大雁类在实例化之前,一定要先实例化Wings类,这两个类紧密的耦合在一起,同生共灭。wings类是不可以脱离大雁类独立存在的
(4)信息的封装性不同
聚合关系中,客户端可以同时了解GooseGroup和大雁类,因为他们是独立的
在组合关系中,客户端只认识大雁类,根本就不知道wings类的存在,因为wings类被封装在Goose类中
三、泛化
1.说明:
实线+箭头 可描述为is a
泛化也成继承,子类将继承父类的所有属性和方法,并且可以根据需要对父类进行扩展
2.泛化关系与代码的对应关系
PS:Bird类继承了animal类
- Class Bird :Animal{
- }
(1)子类继承父类,真的是继承了父类的所有属性和方法吗?
子类确实继承了父类的所有属性和方法,只是对于父类的私有类型成员没有访问权限
(2)泛化和继承是一回事吗?
子类继承父类,父类泛化子类,不同角度来解释而已
(3)为什么药多用组合少用继承?
组合和继承各有优缺点。
类继承是在编译时刻静态定义的,且可直接使用,类继承可以较方便的改变父类的实现,但是类继承也有一些不之处。首先,因为继承在编译时刻就定义了,所以无法再运行时刻改变父类继承的实现。更糟的是,父类通常至少定义了子类的部分行为,父类的任何改变都可以影响子类的行为,如果继承下来的实现不适合解决新的问题,则父类必须重写或被其他更适合的替换。这种依赖关系限制了灵活性并最终限制了复用性。
组合是通过获取对其他对象的引用而在运行时刻动态定义的,由于组合要求具有良好定义的接口,而且,对象只能通过接口访问,所以我们并不破坏封装性;只要类型一致,运行时刻还可以用一个对象来替代另一个对象;更进一步,因为对象的实现是基于接口写的,所以实现上存在较少的依赖关系。
四、实现
1.说明:
虚线+箭头
PS:Win的Goose类实现IFly接口
- Class WideGoose:Ifly{
- }
是一种特殊的抽象类,这种抽象类中值包含常量和方法的定义,而没有变量和方法的实现
关联
方法
属性
组合
代码
子类
两个
大雁
生成
耦合
实例
对象
接口
时刻
箭头
函数
参数
时候
目标
不同
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
中华人民网络安全法在线考试
打印机服务器可以连接无法打印
计算机咨询和数据库安全公司
国外服务器免费
对网络技术员的评语
焦作软件开发公司电话
上海收钱吧互联网科技公司怎么样
巴中市网络安全在线答题
软件开发视频教程第三节
司法鉴定研究院基因频率数据库
数据库发展的趋势
从数据库类型看access
老师讲网络安全图片
河北三星手机服务器租用
acess数据库最多支持多少人
中国人民公安大学网络安全
电商平台服务器
数据库la代表什么意思
云监控服务器配置
cad数据库导出
华为网络技术工程师校招工资
服务器免费监控安全软件
无线电通信网络安全知识培训
高中信息技术教资面试数据库
数据库技术及应用自考题目
企业软件开发图片
塔桥服务器
网络数据库技术与应用的设计
天津环流软件开发
电商平台服务器