【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 来源:网络 在画类图的时候,理清类和类之间的关系是重点.类 ...
随机推荐
- kafka-->storm-->mongodb
目的: 通过Spout发射kafka的数据,到bolt统计每一个单词的个数,将这些记录更新到mongodb中. Spout的nextTuple方法会一直处于一个while循环这中,每一条数据发送给bo ...
- user-select详解
语法: user-select:none | text | all | element 默认值:text 适用于:除替换元素外的所有元素 继承性:无 动画性:否 计算值:指定值 取值: none: 文 ...
- 随机不重复的取数组元素,并赋值给div使用
function pos(){ var items = $('.starone'); items.each(function () { var rand = getRandom(); $(this). ...
- 关于&0xF0的一些认识
首先,要明白0xF0转换成二进制是多少 ----- 1111 0000(0xF0相当于高四位保留,低四位置为0) 我们拿麻将的一万(0x01).一条(0x11).一筒(0x21) 一万的二进制原码 ...
- fun下载内容批量收集
1.download title and url #!/usr/bin/env python #-*- coding:utf-8 -*- import re, urllib2,threading de ...
- 移动端:active伪类无效的解决方法
:active伪类常用于设定点击状态下或其他被激活状态下一个链接的样式.最常用于锚点<a href="#">这种情况,一般主流浏览器下也支持其他元素,如button等. ...
- urllib基础-利用网站结构爬取网页-百度搜索
有的时候爬取网页,可以利用网站额结构特点爬取网页 在百度搜索框中输入搜索内容,单击搜索,浏览器会发送一个带有参数的url请求.尝试删除其中的一些参数,只剩下wd这个参数.发现wd是搜索内容.这样程序可 ...
- urllib基础-构造请求对象,设置用户代理User-Agent
有的网页具有一些反爬机制,如:需要浏览器请求头中的User-Agent.User-Agent类似浏览器的身份证. 程序中不设置User-Agent.默认是Python-urllib/3.5.这样网站就 ...
- nyoj-248-buying feed
http://acm.nyist.net/JudgeOnline/problem.php?pid=248 BUYING FEED 时间限制:3000 ms | 内存限制:65535 KB 难度:4 ...
- sass --watch 失败bug
NameError: uninitialized constant Sass::Plugin::Compiler::SassListen 网上说法是sass v3.2.10有bug 但是我版本3.5. ...