关联,依赖,泛化(又称继承分为扩展或包含),实现,聚合(共享),复合(组合)

摘要:
从关联依赖泛化实现聚合组合来看,两个类之间的关系比一个层描述得更紧密。它可以转换为对不在实例范围内的类或对象的任何类型的引用。或对类的静态方法的引用(并且没有该类的实例)。它指示包之间的关系。这里,B和A之间的关系只是依赖关系。图5显示了依赖关系。3.泛化表示更广义的元素和更具体的元素之间的关系。

从关联—依赖—泛化实现聚合—复合是一层比一层对两个类之间的关系描述紧密。 

1.关联

一般是指两个类之间有相对松散关系,若双方都知道对方则可用实线[双向箭头]连接,或只其中一方知道则用实线加单向箭头从隐藏方指向暴露方,但某个类是否存在并不影响另一个类的存在与否. 

如客户与车子(通过买,租用或其它方式联系在一起); 

2.依赖(Dependency)

实体之间一个“使用”关系暗示一个实体的发生变化后,可能影响依赖于它的其他实例。 更具体地说,它可转换为对不在实例作用域内的一个类或对象的任何类型的引用。其中包括一个局部变量,对通过方法调用而获得的一个对象的引用(如下例所 示),或者对一个类的静态方法的引用(同时不存在那个类的一个实例)。也可利用“依赖”来表示包和包之间的关系。由于包中含有类,所以你可根据那些包中的 各个类之间的关系,表示出包和包的关系

这里BA的关系只是一种依赖(Dependency)关系,这种关系表明,如果类A被修改,那么类B会受到影响。

 

 

 

关联,依赖,泛化(又称继承分为扩展或包含),实现,聚合(共享),复合(组合)第1张

图表5依赖

 

3.泛化(Generalization

表示一个更泛化的元素和一个更具体的元素之间的关系现实世界中一般与特殊关系就是最好的表现

 

 

关联,依赖,泛化(又称继承分为扩展或包含),实现,聚合(共享),复合(组合)第2张

图表1泛化

在上图中,空心的三角表示继承关系(类继承),在UML的术语中,这种关系被称为泛化(Generalization)。Person()是基类,Teacher(教师)Student(学生)Guest(来宾)是子类。

若在逻辑上BA的“一种”,并且A的所有功能和属性对B而言都有意义,则允许B继承A的功能和属性。

例如,教师是人,Teacher Person的“一种”(a kind of )。那么类Teacher可以从类Person派生(继承)。

如果A是基类,BA的派生类,那么B将继承A的数据和函数。

如果类A和类B毫不相关,不可以为了使B的功能更多些而让B继承A的功能和属性。

若在逻辑上BA的“一种”(a kind of ),则允许B继承A的功能和属性。

 4.实现(Realization

指定两个实体之间的一个合约。换言之,一个实体定义一个合,而另一个实体保证履行该合

 

 关联,依赖,泛化(又称继承分为扩展或包含),实现,聚合(共享),复合(组合)第3张

5.聚合(aggregation

代表两个类之间的整体/局部关系是一种相对松散的关系,聚合类B不需要对被聚合的类A负责。

 

 

关联,依赖,泛化(又称继承分为扩展或包含),实现,聚合(共享),复合(组合)第4张

 

 

图表3共享

上面图中,有一个菱形(空心)表示聚合(aggregation)(聚合类型为共享),聚合的意义表示has-a关系。

6.组合(composition

代表两个类之间的整体/局部关系但是一种绝对构成的关系,局部不能为其它整体所共享,暗示“局部”在“整体”内部的生存期职责。合成也是非共享的。所以,虽然局部不一定要随整体的销毁而被销毁,但整体要么负责保持局部的存活状态,要么负责将其销毁。局部不可与其他整体共享。但是,整体可将所有权转交给另一个对象,后者随即将承担生存期职责。

若在逻辑上AB的“一部分”(a part of),则不允许BA派生,而是要用A和其它东西组合出B

例如,眼(Eye)、鼻(Nose)、口(Mouth)、耳(Ear)是头(Head)的一部分,所以类Head应该由类EyeNoseMouthEar组合而成,不是派生(继承)而成。

 

 

 

关联,依赖,泛化(又称继承分为扩展或包含),实现,聚合(共享),复合(组合)第5张

 

 

图表4复合

这幅图与上面的唯一区别是菱形为实心的,它代表了一种更为坚固的关系——组合(composition)(聚合类型为复合)。组合表示的关系也是has-a,不过在这里,A的生命期受B控制。即A会随着B的创建而创建,随B的消亡而消亡。


 

免责声明:文章转载自《关联,依赖,泛化(又称继承分为扩展或包含),实现,聚合(共享),复合(组合)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇loj #106. 二逼平衡树select模型(一 改进客户端)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

web 大文件分片上传处理

这里只写后端的代码,基本的思想就是,前端将文件分片,然后每次访问上传接口的时候,向后端传入参数:当前为第几块文件,和分片总数 下面直接贴代码吧,一些难懂的我大部分都加上注释了: 上传文件实体类: 看得出来,实体类中已经有很多我们需要的功能了,还有实用的属性。如MD5秒传的信息。 首先是文件数据接收逻辑,负责接收控件上传的文件块数据,然后写到服务器的文件中...

VC动态轨迹画线

这是一个绘制直线的简单绘图程序,能过实现动态轨迹画线,在拖动时产生临时线来表示可能画出的直线效果。 首先:建立一个单文档程序,名称为Demo 然后:在视图类的声明文件里面加入数据成员 class CDemoView :public CView{//········protected:         int m_Dragging;     HCURSO...

java 反射 动态代理

在上一篇文章中介绍Java注解的时候,多次提到了Java的反射API。与javax.lang.model不同的是,通过反射API可以获取程序在运行时刻的内部结构。反射API中提供的动态代理也是非常强大的功能,可以原生实现AOP中 的方法拦截功能。正如英文单词reflection的含义一样,使用反射API的时候就好像在看一个Java类在水中的倒影一样。知道了...

键盘输入、鼠标输入、焦点处理

一、键盘类和键盘事件 WPF提供了基础的键盘类(System.Input.Keyboard类),该类提供与键盘相关的事件、方法和属性,这些事件、方法和属性提供有关键盘状态的信息。Keyboard的事件也通过UIElement等XAML基元素类的事件向外提供。 对于键盘操作,其常用的事件有两组: KeyDown事件和PreviewKeyDown事件:处理键...

idea安装及使用

一、什么是IDEA? IDEA,是java语言开发的集成环境,IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助手、代码自动提示、重构、J2EE支持、Ant、JUnit、CVS整合、代码审查、 创新的GUI设计等方面的功能可以说是超常的。IDEA是JetBrains公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著...

Java学习笔记(三)——静态导入,package-info,Fall-through

【前面的话】       算是真正的放松了好几天时间,没有看任何书,没有任何任务,今天是过完年后的第一天上班时间,我又开始了我的学习之路,感觉还没有老,怎么心态越来越平静了,进入工作状态,就好好努力工作,新的一年,我会不努力?哈哈。       这篇文章是自己在学习的过程中总会发现一些小的知识点,然后我就记录在这了,基础文章,选择阅读。 【知识汇总】 一、...