导读:再上一篇博客中,介绍了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】关联、依赖、泛化、实现等关系说明的更多相关文章

  1. UML类图几种关系的总结,泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖

    在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Compositi ...

  2. UML图中类之间的关系:依赖,泛化,关联,聚合,组合,实现

    UML图中类之间的关系:依赖,泛化,关联,聚合,组合,实现 类与类图 1) 类(Class)封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性.操作.关系的对象集合的总称. 2) 在系统中, ...

  3. UML图中类之间的关系:依赖,泛化,关联,聚合,组合,实现(转)

    UML图中类之间的关系:依赖,泛化,关联,聚合,组合,实现   类与类图 1) 类(Class)封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性.操作.关系的对象集合的总称. 2) 在系统 ...

  4. UML图中聚合、组合、关联、依赖、泛化的强弱关系

    一.泛化 1.说明 泛化是一种继承关系,如果一个类A的所有属性和操作能被另一个类B所继承,则类B不仅可以包含自己独有的属性,而且可以包含类A的属性和操作.继承是类与类或者类与接口之间最常见的关系. 2 ...

  5. UML类图及依赖,泛化,关联,聚合,组合,实现

    UML图中类之间的关系:依赖,泛化,关联,聚合,组合,实现 类与类图 1) 类(Class)封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性.操作.关系的对象集合的总称. 2) 在系统中, ...

  6. UML ——六种依赖关系.md

    在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization), 关联(Association), 聚合(Aggregation), 组合(Compos ...

  7. 类之间关系理解:组合>聚合>关联>依赖;实现,继承

    类之间关系理解:组合>聚合>关联>依赖:实现,继承 1. 从类之间的关系来看,不外乎以下几种 组合>聚合>关联>依赖:实现,继承 且可以分为以下两类: (1)实现, ...

  8. 【转】UML类图与类的关系详解

    UML类图与类的关系详解   2011-04-21 来源:网络   在画类图的时候,理清类和类之间的关系是重点.类的关系有泛化(Generalization).实现(Realization).依赖(D ...

  9. UML常用图的几种关系的总结

    在UML的 类图中,常见的有以下几种关系: 泛化(Generalization),  实现(Realization), 关联(Association), 聚合(Aggregation), 组合(Com ...

  10. UML类图与类的关系详解

    摘自:http://www.uml.org.cn/oobject/201104212.asp UML类图与类的关系详解 2011-04-21 来源:网络 在画类图的时候,理清类和类之间的关系是重点.类 ...

随机推荐

  1. 从零开始利用vue-cli搭建简单音乐网站(八)

    这是完成了预想中的最后两个功能:歌曲评论以及歌曲搜索. 1.评论效果: 用户点击评论按钮,评论框获取焦点. 输入之后点击提交,下方显示评论,用户名称以及日期.相应的用户也可以删除自己评论. 当然只能删 ...

  2. printf 遇到bash重定向

    在printf之前添加:setvbuf(stdout,NULL,_IONBF,0);设置缓冲区为空. 在每句printf之后添加:fflush(stdout); 方法一: 1 2 3 4 5 6 7 ...

  3. Android 仿微信朋友圈添加图片

    github地址(欢迎下载Demo) https://github.com/zhouxu88/WXCircleAddPic 老习惯,先上图,着急用的朋友,直接带走Demo,先拿来用吧,毕竟老板催的紧, ...

  4. 判断后台service是否在运行

    public static boolean isServiceRunning(Context mContext,String className) { boolean isRunning = fals ...

  5. C# 操作字符串,在某些特定的字符后面或前面添加其它字符

    C# 操作字符串,在某些特定的字符后面或前面添加其它字符,解决方法: 字符串替换或正则表达式替换即可. 示例:实现的是在每个“第”前面添加一个逗号,在每个“方案”后面添加一个冒号. string s ...

  6. 阿里云apt-get安装包时Err:2 http://mirrors.cloud.aliyuncs.com/ubuntu xenial-security/main amd64 git amd64 1:2.7.4-0ubuntu1.2 404 Not Found

    新部署的云服务器出现如下错误: root@iZj6cbjalvhsw0fhndmm5xZ:~# apt-get install git Reading package lists... Done Bu ...

  7. 系统学习爬虫_2_urllib

    什么是urllib urlopen urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cad ...

  8. 总结:JavaScript异步、事件循环与消息队列、微任务与宏任务

    本人正在努力学习前端,内容仅供参考.由于各种原因(不喜欢博客园的UI),大家可以移步我的github阅读体验更佳:传送门,喜欢就点个star咯,或者我的博客:https://blog.tangzhen ...

  9. 【计数】51nod1677 treecnt

    要将答案看做是小问题的贡献和 Description 给定一棵n个节点的树,从1到n标号.选择k个点,你需要选择一些边使得这k个点通过选择的边联通,目标是使得选择的边数最少. 现需要计算对于所有选择k ...

  10. [LUOGU] P4767 [IOI2000]邮局

    https://www.luogu.org/problemnew/show/P4767 四边形不等式好题! 可以设f[i][j]表示前i个村庄,建了j个邮局的最小代价. 转移:f[i][j]=min{ ...