UML类图关系详解

[size=medium][color=brown][b]一、背景介绍[/b][/color][/size]
[b]UML类图的关系,或者说面向对象语言中,静态类之间的关系有哪些,他们之间的区别在哪里,这是本文要解决的问题点。[/b]

[color=brown][size=medium][b]二、类之间关系[/b][/size][/color]
[b]有泛化、继承(非UML标准中)、实现、依赖、关联、聚合、组合七种关系,下面逐个介绍这些概念。[/b]

[color=indigo][size=medium][b]1. 泛化[/b][/size][/color]
泛化是对一些具体的个体的一般化,抽象化,是由具体的给他抽象出共性的过程。
UML类图:
[img]http://dl2.iteye.com/upload/attachment/0127/5990/f1953dc6-bec0-35ca-8bfe-6d107d1d0e96.png[/img]

[size=medium][color=indigo][b]2. 继承[/b][/color][/size]
继承是一个类(称为子类或子接口)继承另一个类(称为父类或父接口)里面的所有属性和方法,在增加自己特性的过程。
UML类图:
[img]http://dl2.iteye.com/upload/attachment/0127/5990/f1953dc6-bec0-35ca-8bfe-6d107d1d0e96.png[/img]


[size=medium][color=indigo][b]3. 实现[/b][/color][/size]
实现是一个类 class 去实现一个接口 interface
UML类图:
[img]http://dl2.iteye.com/upload/attachment/0127/5994/776ad96d-e118-3ee9-b026-acc5a7ce34d3.png[/img]

[size=medium][color=indigo][b]4. 依赖[/b][/color][/size]
可以简单的理解,就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、、临时性的、非常弱的,但是B类的变化会影响到A;比如某人要过河,需要借用一条船,此时人与船之间的关系就是依赖;表现在代码层面,为类B作为参数被类A在某个method方法中使用
UML类图:
[img]http://dl2.iteye.com/upload/attachment/0127/5996/43331bc5-a331-3b52-8d40-352ae19f6b2f.png[/img]

[size=medium][color=indigo][b]5. 关联[/b][/color][/size]
他体现的是两个类、或者类与接口之间语义级别的一种强依赖关系,比如我和我的朋友;这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的、关联可以是单向、双向的;表现在代码层面,为被关联类B以类属性的形式出现在关联类A中,也可能是关联类A引用了一个类型为被关联类B的全局变量
UML类图:
[img]http://dl2.iteye.com/upload/attachment/0127/5988/e2b65346-0d7d-3ab9-946e-30ce70862798.png[/img]

[size=medium][color=indigo][b]6. 聚合[/b][/color][/size]
聚合是关联关系的一种特例,他体现的是整体与部分、拥有的关系,即has-a的关系,此时整体与部分之间是可分离的,他们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享;比如计算机与CPU、公司与员工的关系等;表现在代码层面,和关联关系是一致的,只能从语义级别来区分
UML类图:
[img]http://dl2.iteye.com/upload/attachment/0127/5992/3c6bb36a-12e6-3b44-a0bd-13a02ecf17fe.png[/img]

[size=medium][color=indigo][b]7. 组合[/b][/color][/size]
组合也是关联关系的一种特例,他体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合;他同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束;比如你和你的大脑;表现在代码层面,和关联关系是一致的,只能从语义级别来区分
UML类图:
[img]http://dl2.iteye.com/upload/attachment/0127/5998/06aca415-562c-335b-95dc-29313f12d2bf.png[/img]

[size=medium][color=brown][b]三、自己的理解[/b][/color][/size]
[color=indigo][b]1. 继承和泛化的区别[/b][/color]
其实就是一回事,讲的是子类和父类的关系。只是继承是从子类的角度来说,子类继承父类,先有父类。泛化是从父类的角度来说,先有各种各样的个体,抽象出共同部分,来泛化成父类。

[b][color=indigo]2. 实现很简单,就是一个类实现一个接口,没什么可说的[/color][/b]

[color=indigo][b]3. 依赖、关联、聚合和组合的区别[/b][/color]
就类之间的关系来讲:
[b]依赖是把一个类作为另一个类中方法的参数或返回值[/b]。非常弱的关系,只有函数使用的时候才产生关系。
[color=red]依赖中两个类在实际意义上是平等关系[/color]

[b]关联、聚合和组合,其实都是一个类作为另一个类的成员变量[/b]。只是从实质的角度来讲,层次深浅的关系。
[color=red]关联中两个类在实际意义上也是平等的关系[/color]

聚合,中两个类在实际意义上是整体和部分的关系,注意,部分可以独立存在。比如猴群和猴子。
[color=red]聚合中两个类在实际意义上是整体和部分的关系,但是部分可以独立存在。[/color]

组合,中两个类的实际意义上也是整体和部分的关系,只是部分不可以独立存在,在类的生命周期里,可以先初始化部分后初始化整体,也可以先初始化整体后初始化部分,但是,在销毁的时候,一定是先销毁部分在销毁整体。比如人和头发的关系。
[color=red]组合中两个类在实际意义上也是整体和部分的关系,不过部分不可以独立存在[/color]

[color=red][b]其实,依赖、关联、聚合、组合都是关联。依赖是最弱的关联,其次是普通关联,接下来是聚合,组合是最强的关联:
关联强度: 组合 > 聚合 > 关联 > 依赖[/b][/color]

推荐博文:写的也很好
http://www.cnblogs.com/olvo/archive/2012/05/03/2481014.html
http://www.uml.org.cn/oobject/201104212.asp


欢迎大家关注我的公众号

[img]http://dl2.iteye.com/upload/attachment/0129/4870/8f482b11-ccc6-3c8e-a2c1-857a5039bfbb.jpg[/img]
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值