导读:再上一篇博客中,介绍了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. APICloud手机APP开发

    官网 http://docs.apicloud.com/

  2. Java删除List指定元素

    List<String> lists = new ArrayList<>(); list.add("123"); list.add("456&qu ...

  3. .aspx IIS发布404.17时候的问题

    .aspx IIS发布404.17时候的问题 在发布aspx的时候遇到问题利用网上的cmd加入注册表没有效果 在加入了MIME中加入.aspx和application/.aspx之后却变成了下载文件 ...

  4. leetcode287 Find the Duplicate Number

    思路: 转换成链表之后使用floyed判环法.转换之后重复的那个数字是唯一一个有多个前驱和一个后继的节点,因此是环的起始节点. 实现: class Solution { public: int fin ...

  5. MyBatis的数据库操作

    MyBatis的数据库操作 大学毕业有一段时间了,作为一名没有任何开发工作经验的大专毕业生想找到一份软件开发的工作确实很难,但我运气还算不错,应聘上一份java web开发的工作.作为一名新人,老板给 ...

  6. 海康威视采集卡结合opencv使用(两种方法)-转

    (注:第一种方法是我的原创 ^_^. 第二种方法是从网上学习的.) 第一种方法:利用 板卡的API:  GetJpegImage 得到 Jpeg 格式的图像数据,然后用opencv里的一个函数进行解码 ...

  7. Linux if 命令判断条件总结

    Linux if 命令判断条件总结Linux if命令 关于文件属性的判断式 -a 如果文件存在 -b 如果文件存在,且该文件是区域设备文件 -c 当file存在并且是字符设备文件时返回真 -d 当p ...

  8. saltstack-day1

    一.远程执行命令 1.指定一个ipv4地址或者一个子网 salt -S 172.16.7.19 test.ping salt -S test.ping 2. 正则表达式 salt -E "j ...

  9. (四)VMware Harbor 配置文件

    VMware Harbor 配置文件 :harbor.yml # Configuration file of Harbor # The IP address or hostname to access ...

  10. Python数据结构和类型--解压序列赋值多个变量

    Python数据结构和类型 1.1 解压序列赋值给多个变量 现在有一个包含N个元素的元组或者是序列,怎样将它里面的值解压后同时赋值给N个变量? 解决思路:先通过简单的解压赋值给多个变量,前提是变量的数 ...