【UML】关联、依赖、泛化、实现等关系说明
导读:再上一篇博客中,介绍了UML的9种图,现在,将对UML中的关系进行总结。图很重要,但图形中的各种关系也很重要,这扯关系的事儿,从来都是大事儿。
一、基本定义
1.1 总体说明
1.2 具体定义
1,关联
定义:体现的是两个类、或者类与接口之间语义级别的一种强依赖关系,比如我和我的朋友;这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的、关联可以是单向、双向的。也有自身关联。
单向关联
教师和课程是单向关联,一名老师可以教授多门课程,但课程是抽象类,它不能拥有老师。
双向关联
老师和学生属于双向关联,老师可以有多名学生,学生也可以有多名老师。
自身关联
一个雇员可以是一个工作者,还可以是一个厨师,它们之间是一个责任关系。(PS:这一个关系不是很清楚)
聚合
定义:聚合是关联关系的一种特例,他体现的是整体与部分、拥有的关系,即has-a的关系,此时整体与部分之间是可分离的,他们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享;比如计算机与CPU、公司与员工的关系等;表现在代码层面,和关联关系是一致的,只能从语义级别来区分。
雁群,由很多只雁聚集而成,这时候,雁群和单个的雁之间的关系,就是聚合关系。也就是Has——a关系。
组合
定义:是整体与部分的关系,但部分不能离开整体而单独存在。如公司和部门是整体和部分的关系,没有公司就不存在部门。
一指雁,有两只翅膀。这时候翅膀和雁就是组合关系。翅膀不能脱离雁而存在,就像是手脱离了身体就不是手了一样。没有雁这个主体存在,就没有翅膀。
2,依赖
定义:是一种使用关系,可以是类、包、构件之间的关系。
依赖关系,是普遍存在的一种关系。动物的生成需要依赖水。一个人可以使用0个或多个杯子。
3,泛化
定义:是一种继承关系,表示一般与特殊的关系,它指定了子类如何特化父类的所有特征和行为。例如:老虎是动物的一种,即有老虎的特性也有动物的共性。
泛化关系,可以等同于继承关系。如人是抽象出来的一个类,老师和学生是另外的两个类,但老师和学生又属于人这个大类,同时又有自己的一些特性。
4,实现
定义:是一种类与接口的关系,表示类是接口所有特征和行为的实现.。
实现,体现了接口的重用,我觉得是体现了面向对象中的多态。像发声这个动作,就有狗、猫、羊不同的接口去实现,虽然都是发声,但实现的过程不同。
二、相互关系
2.1关联和聚合
联系: 关联和聚合为通信提供了一条途径;关联是两个类间的非直接连接,聚合是关联的一种强制模式。
区别:如果两个对象通过整体和部分的关系具有紧密的边界,这种关系成为聚合;如果两个对象通常被认为是独立的,这种关系称为关联。
2.2 聚合和组合
联系:都是一种关联联系,表达了整体/部分的关系。
区别:聚合关系的部分和整体都有各自的生命周期,也就是说聚合关系中的部分可以脱离整体存在;组合关系中的部分不能脱离整体存在。
2.3 泛化和继承
联系:都表示一个子类继承父类的基本功能,同时增添自己的新功能。(在语义上可以等同)
区别:是自上而下和自下而上的区别。如:水果泛化苹果;苹果继承水果。
2.4 泛化和实现(纯属个人理解)
联系:都实现了重用,节约了开发时间。
个人理解:从面向对象的开发技术来看,泛化=继承,实现=多态。
区别:泛化,实现了代码的重用,就是好一些属性什么的。实现,实现了接口的重用。感觉上,这个实现比泛化更抽象。
三、总结
把关系的各个定义、联系和区别分清了,我们很容易的就发现关系之间的强弱对比。
实现=泛化>关联>依赖
呵呵,突然就想到我当时看UML视频关于关系这一块讲解的时候,脑袋里蹦出的笑话。其实吧,这个关系的强弱很容易理解。小女孩依赖一个女人,不能说明她们之间有什么关系,但如果这个小女孩是女人姐姐的孩子,这时候她们之间的关联就变成亲戚的关系。然后,如果这个女孩就是这个女人自己的孩子,就会发现这个小女孩和女人至少有一处共同点,这时候就是泛化了。其实这个故事呢是有后篇的,也就是关于“实现”,虽然生活中也有,但是好像有点离谱,我就不说了。
四、个人感受
其实刚开始一听到泛化等于继承的时候,就觉得这里肯定有问题。我就突然想到了黑格尔的唯心论:存在即合理,合理就是现实的。我就觉得,既然都等同了,为什么不直接用继承,还非要用泛化呢。还有就是,说泛化=实现,既然都等于了,那取一个就行了,为什么还要有两个。然后,就是这种想法,一直让我去不断的找联系,找区别。事实证明:果真还是不同的。不得不说吧,有时候唯心主义能解决的问题,唯物主义还不一定行。嘿嘿。
好好学习,天天向上。紧接着就要开始实践了,加油!一条散发着神秘与危险信号的路途,马上就要开始了。
请大家多多指教,谢谢!
【UML】关联、依赖、泛化、实现等关系说明的更多相关文章
- UML类图几种关系的总结,泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖
在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Compositi ...
- UML图中类之间的关系:依赖,泛化,关联,聚合,组合,实现
UML图中类之间的关系:依赖,泛化,关联,聚合,组合,实现 类与类图 1) 类(Class)封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性.操作.关系的对象集合的总称. 2) 在系统中, ...
- UML图中类之间的关系:依赖,泛化,关联,聚合,组合,实现(转)
UML图中类之间的关系:依赖,泛化,关联,聚合,组合,实现 类与类图 1) 类(Class)封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性.操作.关系的对象集合的总称. 2) 在系统 ...
- UML图中聚合、组合、关联、依赖、泛化的强弱关系
一.泛化 1.说明 泛化是一种继承关系,如果一个类A的所有属性和操作能被另一个类B所继承,则类B不仅可以包含自己独有的属性,而且可以包含类A的属性和操作.继承是类与类或者类与接口之间最常见的关系. 2 ...
- UML类图及依赖,泛化,关联,聚合,组合,实现
UML图中类之间的关系:依赖,泛化,关联,聚合,组合,实现 类与类图 1) 类(Class)封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性.操作.关系的对象集合的总称. 2) 在系统中, ...
- UML ——六种依赖关系.md
在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization), 关联(Association), 聚合(Aggregation), 组合(Compos ...
- 类之间关系理解:组合>聚合>关联>依赖;实现,继承
类之间关系理解:组合>聚合>关联>依赖:实现,继承 1. 从类之间的关系来看,不外乎以下几种 组合>聚合>关联>依赖:实现,继承 且可以分为以下两类: (1)实现, ...
- 【转】UML类图与类的关系详解
UML类图与类的关系详解 2011-04-21 来源:网络 在画类图的时候,理清类和类之间的关系是重点.类的关系有泛化(Generalization).实现(Realization).依赖(D ...
- UML常用图的几种关系的总结
在UML的 类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization), 关联(Association), 聚合(Aggregation), 组合(Com ...
- UML类图与类的关系详解
摘自:http://www.uml.org.cn/oobject/201104212.asp UML类图与类的关系详解 2011-04-21 来源:网络 在画类图的时候,理清类和类之间的关系是重点.类 ...
随机推荐
- 实现如下语法的功能:var a = (5).plus(3).minus(6);
Number.prototype.plus= function(val){ return parseInt(this)+val; }; Number.prototype.minus= function ...
- AJPFX关于延迟加载的单例模式的安全问题解决
请写一个延迟加载的单例模式?写懒汉式:当出现多线程访问时怎么解决?加同步,解决安全问题:效率高吗?不高:怎样解决?通过双重判断的形式解决.懒汉式:延迟加载方式.当多线程访问懒汉式时,因为懒汉式的方法内 ...
- ycsb安装和使用介绍
nosql性能测试工具ycsb0.1的使用 使用文档参考地址:https://www.cnblogs.com/SailorXiao/p/5808828.html ycsb地址:https://gith ...
- Servlet和JSP之有关Servlet和JSP的梳理(二)
JSP JSP页面本质上是一个Servlet,JSP页面在JSP容器中运行,一个Servlet容器通常也是JSP容器. 当一个JSP页面第一次被请求时,Servlet/JSP容器主要做一下两件事情: ...
- Ambiguous mapping. Cannot map 'registerController' method
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'requestMappi ...
- UVALive 4287 Proving Equivalence (强连通分量)
把证明的关系看出一张图,最终就是要所有的点都在至少一个环中.环的判断和度数有关. 用tarjan找强连通分量,在一个强连通分量点已经等价缩点以后形成一个DAG,计算入度为0的点数a, 出度为0的b,取 ...
- SQL——SQL语言全部关键字详解
http://blog.csdn.net/quinnnorris/article/details/71056445 数据库中我们做常用的就是SQL基本查询语言,甚至有些人认为数据库就是SQL,SQL就 ...
- WPF中做出一个QQ登陆界面
Xaml: <Window x:Class="ChatSoftware.MainWindow" xmlns="http://schemas.microsoft.co ...
- JS原型、原型链、构造函数、实例与继承
https://cloud.tencent.com/developer/article/1408283 https://cloud.tencent.com/developer/article/1195 ...
- rpn网络结构再分析
这是rpn网络train阶段的网络结构图 rpn_conv1之前的网络是特征提取层,也是和fast rcnn共享的层.rpn_conv1是一层1*1的卷积,这一层是单独为rpn网络多提取一层特征,这一 ...