下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、面向对象UML中类关系2011-5-19 来源:网络如果你确定两件对象之间是is-a的关系,那么此时你应该使用继承;比如菱形、圆形和方形都是形状的一种,那么他们都应该从形状类继承而不是聚合。如果你确定两件对象之间是has-a的关系,那么此时你应该使用聚合;比如电脑是由显示器、CPU、硬盘等组成的,那么你应该把显示器、CPU、硬盘这些类聚合成电脑类,而不是从电脑类继承。类间的关系 网上关于此类的讨论非常多,发现对于该问题的理解各有各的说法,而各个说法中又相去甚远。通过浏览这些讨论以及对O'Reilly - UML 2.0 In A Nutshell (2007)的参考,发表一下自己的看法
2、类间关系有很多种,在大的类别上可以分为两种:纵向关系、横向关系。纵向关系就是继承关系,它的概念非常明确,也成为OO的三个重要特征之一,这里不过多的讨论。横向关系较为微妙,按照UML的建议大体上可以分为四种:1. 依赖 (Dependency) 2. 关联 (Association) 3. 聚合 (Aggregation) 4. 组合 (Composition) 它们的强弱关系是没有异议的:依赖 < 关联 < 聚合 < 组合然而它们四个
3、之间的差别却又不那么好拿捏,需要好好体会。1. 依赖: o UML表示法:虚线 + 箭头 o 关系:" . uses a ." o 此关系最为简单,也最好理解,所谓依赖就是某个对象的功能依赖于另外的某个对象,而被依赖的对象只是作为一种工具在使用,而并不持有对它的引用。 o 典型的例子很多,比如:class Human public void breath() Air freshAir = new A
4、ir(); freshAir.releasePower(); public static void main() Human me = new Human(); while(true)
5、60; me.breath(); class Air public void releasePower() /do sth.
6、160; o 释义:一个人自创生就需要不停的呼吸,而人的呼吸功能之所以能维持生命就在于吸进来的气体发挥了作用,所以说空气只不过是人类的一个工具,而人并不持有对它的引用。 2. 关联: o UML表示法:实线 + 箭头 o 关系:" . has a ." o 所谓关联就是某个对象会长期的持有另一个对象的引用,而二者的关联往往也是相互的。关联的两个对象彼此间没有任何强制性的约束,只要二者同意,可以随时解除关系或是进行关联,它们在生命期问题上没有任何约定。被关联的对象还可以再被别的对象关联,所以关联是可以共享的。 o 典型的例子很多,比如:class H
7、uman ArrayList friends = new ArrayList(); public void makeFriend(Human human) friends.add(human); public static void main()
8、160; Human me = new Human(); while(true) me.makeFriend(mySchool.getStudent();
9、160; o 释义:人从生至死都在不断的交朋友,然而没有理由认为朋友的生死与我的生死有必然的联系,故他们的生命期没有关联,我的朋友又可以是别人的朋友,所以朋友可以共享。 3. 聚合: o UML表示法:空心菱形 + 实线 + 箭头 o 关系:" . owns a ." o 聚合是强版本的关联。它暗含着一种所属关系以及生命期关系。被聚合的对象还可以再被别的对象关联,所以被聚合对象是可以共享的。虽然是共享的,聚合代表的是一种更亲密的关系。 o 典型的例子很多,比如:class Human
10、60; Home myHome; public void goHome() /在回家的路上 myHome.openDoor(); /看电视 public static v
11、oid main() Human me = new Human(); while(true) /上学
12、60; /吃饭 me.goHome(); o 释义:我的家和我之间具有着一种强烈的所属关系,我的家是可以分享的,而这里的分享又可以有两种。其一是聚合间的分享,这正如你和你媳妇儿都对这个家有着同样的强烈关联;其二是聚合与关联的分享,如果你的朋友来家里吃个便饭,估计
13、你不会给他配一把钥匙。 4. 组合: o UML表示法:实心菱形 + 实线 + 箭头 o 关系:" . is a part of ." o 组合是关系当中的最强版本,它直接要求包含对象对被包含对象的拥有以及包含对象与被包含对象生命期的关系。被包含的对象还可以再被别的对象关联,所以被包含对象是可以共享的,然而绝不存在两个包含对象对同一个被包含对象的共享。 o 典型的例子很多,比如:class Human Heart myHeart = new Heart(); p
14、ublic static void main() Human me = new Human(); while(true) myHeart.beat(); o 释义:组合关系就是整体与部分的关系,部分属
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年黑龙江省穆棱市高考物理一轮复习试卷(达标题)附答案详解
- 2026江苏泰州市人民医院招聘高层次人才6人(第二批)笔试备考试题及答案详解
- 2026年云南省泸水市高考物理一轮复习考试卷带答案详解(新)
- 2026贵州黔东南州黎平县中医医院招聘编外工作人员18人笔试备考题库及答案详解
- 2026中国地质调查局局属单位招聘(第二批)补充招聘笔试参考试题及答案详解
- 2026年山东省滕州市高考物理5月学情自测测试卷及参考答案详解【培优A卷】
- 2025年广东省雷州市高考物理5月学情自测考试卷带答案详解(典型题)
- 2026年云南省腾冲市高考物理二模试卷及答案详解
- 2025年江西省德兴市高考物理自主招生模拟卷及完整答案详解【名师系列】
- 2025年江西省樟树市高考物理一模试卷有完整答案详解
- 2026云南地质工程第二勘察院有限公司社会招聘29人考试参考题库及答案详解
- 2026贵州贵阳市白云区选聘社区工作者62人备考题库含答案详解
- 2026上海博物馆公开招聘12名工作人员备考题库完整参考答案详解
- 2026年四川省高考历史试题(含答案及解析)
- 2025年河南省招聘乡村振兴村级协理员真题
- 四川《装配式复合轻质墙体标准》
- 2026年广东省大湾区联考初中学业水平质量监测卷八年级地理(试卷+解析)
- 2026年见证取样员模拟题含答案详解(研优卷)
- 养老机构安全隐患排查治理台账(范本)
- 中信建投:27年钠电平价放量无虞碳酸锂涨价预期加速进程
- 漂流岗位责任制度
评论
0/150
提交评论