依赖、关联、聚合、组合_第1页
依赖、关联、聚合、组合_第2页
依赖、关联、聚合、组合_第3页
依赖、关联、聚合、组合_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、你是我的玫瑰-类关系阐微世界是普遍联系的,因此程序世界中的类,也不可能是孤立的。UML为 我们定义了它们之间的关系,就是:依赖、关联、聚合、组合还有泛化。泛化关系比较好理解,就是表示类之间的继承关系。容易混淆的是依赖、 关联、聚合和组合的关系。这里做一些甄别:1、依赖和关联的颠倒颠在网上查找了一下依赖和关联的区别,有说关联本身即是一种依赖,亦 有说依赖是一种弱关联,其实说来说去是一档子事。依赖和关联都是说一个类 用到了另一个类。其区别在于一个是使用,一个是拥有。依赖:具有某种偶然性。比如说我要过河,没有桥怎么办,我就去借来一 条小船渡过去。我与小船的关系仅仅是使用(借用)的关系。表现在代码上,

2、为 依赖的类的某个方法以被依赖的类作为其参数。或者是class A的某个方法创 造了 class B的实例抑或对class B的静态方法的调用。如果A依赖于B,那 意味着B的变化可能要求A也发生变化;这是uml图表示的依赖关系:PersonPerson代码表现:1 日国public class Person2白由3白山4/*划船*/public void oarage (Boat boat)boat.oarage();关联:有名的客户和订单的关系以及公司和员工的关系,都是关联关系。还有 就是我和我的单车的例子,他们都是一种“拥有”的关系。表现在代码上,就 是一个类包含另一个类的实例,通常表现为

3、被关联类以类属性的形式出现在关联 类的类定义中,也可以表现为关联类引用了一个类型为被关联类的全局变量。关 联可以使单向的,也可以使双向的。从网上找到的公司和员工的UML图和代码:Company + +N Em ploy 非 公司和员工的关联关系曰田public class Company(private Employee employee;白中 public Employee getEmployee()return employee; TOC o 1-5 h z 6白由 public void setEmployee(Employee employee)this.employee=employ

4、ee;/公司运作10白由 public void run()employee.startWorking();14可见依赖于与关联亦有动静之别,关联的类“静态”地引用了被关联类的实例变 量,而依赖的偶然性也正说明了它的动态性。2、聚合与组合同出而异体聚合与组合其实都是关联的特例,都是整体和部分的关系。他们的区别在于 聚合的两个对象之间是可分离的,他们具有各自的生命周期。而组合往往表现为 一种唇齿相依的关系。聚合:一种容纳或曰包含的关系,如同机场和飞机,汽车和轮胎的关系。其实仔 细想想,前面的公司和员工的关系也有聚合的味道在里面。组合:也可称之为强聚合,整体和部分是不可分的,整体的生命周期结束时也

5、就 是部分的生命周期到头时。很有名的就是桌子和桌子腿的关系。聚合的UML图:组合的UML图:然而,聚合与组合的代码表现形式是一样的,都可以表现为以下的形式,它们仅 仅具有语义上的区别。网上找到的电脑和CPU的关系的代码表现:曰田public class ComputerI private CPU cpu;白由 public CPU getCPU()I return cpu;6由由 public void setCPU(CPU cpu)71 this.cpu=cpu;开启电脑10百由 public void start()/cpu 运作121cpu.run();15结语:一般情况下,当某个类被当

6、作参数传递并且被当作结果返回的时候,或者被 当作某个方法内的临时变量使用的时候,可以运用依赖关系,使用关联来表示一 个拥有关系,而不是整体-部分关系。使用聚合来表示一个动态的整体-部分关系, 而是用组合来表示一个静态的整体-部分关系。但是需要指出的是,所谓“关系” 只是在某个问题域才有效,离开了这个问题域,可能这些关系就不成立了,例如 之前我和小船的关系,可能在某个问题域中,我是船夫,我的工作就是驾着小船 在河上摆渡,那我和小船的关系就上升为关联关系了。试想一下,武侠小说中的 那些剑仙们,修炼到人剑合一的境地,剑在人在,剑亡人亡,那它们之间的关系 就似乎与组合关系类似了。又如在关心汽车的领域里,轮胎是一定要组合在汽车 类中的,因为它离开了汽车就没有意义了。但是在卖轮胎的店

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论