前言

  最近有打算学习一下设计模式,所以就去看了园子里面左潇龙大哥的设计模式文章,看完之后只有一个感觉,我啥时候也能写出来这么牛逼的文章啊,但是我这语文老师死的早的人还是算了,但是设计模式还是要学的,这个博客还是要写的,所以还是接着写吧,遵从龙哥的教诲,学习设计模式之前先简单学习一下类图里面各种类的关系,因此就有了这篇随笔,废话不多说,下面进入正文。

类与类之间的关系

  类与类之间的关系从弱到强依次是:没有关系(这不是扯淡嘛)、依赖、关联、聚合、组合,还有泛化(其实就是继承)和实现,这俩大哥是在是没地方排了,就随便放着吧,下面一一介绍各个关系:

0.没有关系

  因为没有关系,所以从零开始;

1.依赖

  为什么说依赖是类与类之间最弱的关系呢?这是因为依赖关系具有很大的偶然性,或者说是临时性,比如我要回家,到了地铁站,来了一辆开往我的目的地的地铁我就可以坐上,这时候就说我和这辆地铁之间是有依赖关系的,但是我下次去坐地铁的时候可能就是另外一辆地铁了,那么和我有依赖关系的就是另外一辆地铁,所以说依赖关系具有很大的偶然性。放到编写程序中来说,一个类A作为另一个类B的一个方法的参数,那么就说明类A和类B之间有依赖关系,且类B依赖于类A,依赖关系在UML类图是使用带有箭头的虚线表示,箭头指向被依赖的类,如下图所示(请原谅我电脑上没有类图,只好用电脑自带的画图工具画图了):

2.关联

  类与类之间的关联关系就比依赖关系更紧密一些,那么什么是关联关系呢?还是上面坐车回家的例子,但是现在我买了个电动自行车简称电动车回家了,我今天回家骑的是我的电动车,明天回家骑的还是我的电动车,大后天甚至大大后天都是我的小电动车,那么我和我的电动车之间就是关联关系,因为不具有随机或者偶然性(当然车被偷了不算),我和我的电动车之间的关系肯定是要比随机坐上的一辆地铁的关系是要紧密的多,此外具有关联关系的双方之间具有平等性(当然我和电动车之间不具有公平性,总不能让电动车骑我吧);在代码层面来说,被关联类A以类的属性的方式出现在类B中,也可以说是类B引用了一个类型为A的全局变量,说得通俗一点就是关联类B中有一个属性是被关联类A,关联关系使用带箭头的实线表示,UML类图如下所示:

  关联关系又可以分为多种,分别是:单向关联、双向关联、多重性关联以及自关联。

  依赖和关联的区别:

  依赖关系是一种弱的关联关系,只要一个类使用到了另一个类,那么就可以说两者之间具有关联关系,并且关联关系之间具有很大的偶然性,并不是必然的关系,但是关联关系呢就具有很明显的强依赖关系,并且具有长久性,并不是偶然的或者是随机的;

3.聚合

  聚合在某种意义上来说是另外一种关联关系,但是聚合强调的更多的是整体和局部的关系,而且是整体和局部很弱的关联关系,即使整体不存在了,局部也是可以作为单独的个体存在的,什么意思呢?还拿我们家那个电动牌自行车说事,哥们儿为了显示有钱,特意买了两辆电动车,一辆飞鸽牌的一辆飞雁牌的,今天骑这个上班明天骑那个回家,想怎么骑都行,都是我的自行车嘛,但是呢,昨天下班老婆发话了,明天你那飞鸽牌的自行车归我了,我要出去溜达一圈,得,第二天我们就一人一个电动车骑着,迎着朝阳出发了。

  有人会说,你上面扯了那么多,跟聚合有个毛线关系,小哥儿,不要着急,听我慢慢道来,如果从代码层面来说,我的自行车是不是可以看做一个对象,这个对象又包含了两个对象,一个是对象是飞鸽牌自行车,一个是飞雁牌自行车,现在我老婆拿走了一辆,拿走的那辆还是可以骑的并没有什么影响,唯一有影响的就是我的自行车只剩下一辆了,两个自行车组成的就是一个聚合对象,但是组成聚合对象的对象还是可以单独存在的,也就是说假设有聚合对象A,A对象可以包含对象B,但是B对象并不是A对象的一部分,也就是前面所说的B对象可以单独存在。

  不知道我上面说清楚了没有,简而言之就是组成聚合对象的对象,拿出来是可以作为一个单独的对象的,其在聚合对象中一般表示为集合或者说是数组形式,在UML类图中使用实线箭头和空心菱形表示:

4.组合

  上面的聚合的例子理解了的话,组合是很好理解的,因为组成组合对象的对象必然是组合对象的一部分,而且不能离开组合对象成为单独的对象;有点绕,简单来说就是你的胳膊是你身体的一部分,如果把你胳膊看了你的胳膊就不能用了,组合关系其实也是整体和部分的关系,但是这个部分是不可分割的一部分,类图与聚合一样,只不过菱形变成了实心的,考虑倒我的画图艰难,我就不再画图了。

聚合和组合的区别:

  聚合和组合其实都是整体和个体的关系,但是区别就在于聚合关系中的个体是不依赖于整体的,聚合中的个体是可以作为单独的对象存在的,但是组合不行,组合关系中的个体是依赖于整体的,如果整体不存在了,那么个体也是会消失的,组合中整体和个体之间具有相同的生命周期。

5.实现

  实现很容易理解,就是实现接口嘛,在UML类图中使用虚线加空心三角表示,从实现类指向接口类;

6.继承(泛化)

  继承也称之为泛化,这个也容易理解,就是子类继承父类,在UML类图中使用实线加上空心三角表示,从子类指向父类;

结语

  关于UML类图中的类之间的关系的学习暂时就到这里,后面有用到类图的其他方面内容了再学习;

初识UML类图--类之间关系的更多相关文章

  1. UML类图中的关系表示

    UML类图中的关系和表示方法 类图是用来描述程序中的类以及它们之间的关系的,使用类图可以帮助我们简化对系统的理解.在UML类图中比较常见的关系有六种,它们分别是:依赖.关联.聚合.组合.泛化.实现,这 ...

  2. 设计模式之UML类图的常见关系

    设计模式之UML类图的常见关系 本文来自转载 烧点饭博客 本篇会讲解在UML类图中,常见几种关系: 泛化(Generalization),依赖(Dependency),关联(Association), ...

  3. 转 UML类图几种关系的总结

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

  4. UML类图的常见关系1

    设计模式之UML类图的常见关系(一)   本篇会讲解在UML类图中,常见几种关系: 泛化(Generalization),依赖(Dependency),关联(Association),聚合(Aggre ...

  5. UML类图几种关系的总结(网摘)

    Source link:http://www.open-open.com/lib/view/open1328059700311.html UML类图几种关系的总结 原文出处:[深度开源] 在UML类图 ...

  6. 【转载】UML类图几种关系的总结

    因为有的时候很久不弄UML图,老是忘记几个常见的连接线的意思,这篇完全说转载:UML类图几种关系的总结 在UML类图中,常见的有以下几种关系: 泛化(Generalization),  实现(Real ...

  7. 2.java面向对象类与类/类与对象之间关系详解

    继承.实现.依赖.关联.聚合.组合的联系与区别 下面的内容很基础,同时也很简单,但是也很重要. 继承 指的是一个类(称为子类.子接口)继承另外的一个类(称为父类.父接口)的功能,并可以增加它自己的新功 ...

  8. UML类图五种关系与代码的对应关系

    转: UML类图中的五种关系的耦合强弱比较:依赖<关联<聚合<组合<继承 一.依赖关系: (一)说明 虚线+箭头 可描述为:Uses a 依赖是类的五种关系中耦合最小的一种关系 ...

  9. [UML][转]UML类图符号 各种关系说明以及举例

    修改自:http://www.cnblogs.com/duanxz/archive/2012/06/13/2547801.html UML中描述类和类之间相互关系的方式包括:依赖(Dependency ...

随机推荐

  1. <canvas>设置宽高遇到的问题

    在使用<canvas>元素时必须设置宽度和高度,指定可以绘画的区域大小.但是这里设置宽度和高度的时候有一个小问题. 样例代码: <!DOCTYPE html> <html ...

  2. SQLServer比较两条数据是否相同

    SQLServer比较两条数据是否相同 直接比较可能会一个一个字段的比较,也可以将多个字段拼成一个串然后比较,这里有个hash值比较的方法,很好用 用法 将需要的比较的column放进去,逗号隔开,只 ...

  3. 如何在多线程leader-follower模式下正确的使用boost::asio。

    #include <assert.h> #include <signal.h> #include <unistd.h> #include <iostream& ...

  4. win8下IE10的鼠标mouse事件响应错误BUG

    具体症状就是有时候鼠标左键响应,有时候右键才能响应 问题的原因就是事件对象的detail没有复位 https://github.com/clientside/amplesdk/issues/187

  5. 一起学微软Power BI系列-官方文档-入门指南(5)探索数据奥秘

    我们几篇系列文章中,我们介绍了官方入门文档与获取数据等基本知识.今天继续给大家另外一个重点,探索数据奥秘.有了数据源,有了模型,下一步就是如何解析数据了.解析数据的过程需要很多综合技能,不仅仅是需要掌 ...

  6. SAE学习-使用SAE的Storage服务存储图片

    看到园子里面有同学写了一篇<基于PHP实现阿里云开放存储服务>,围观地址:http://www.cnblogs.com/nosqlcoco/p/3474773.html.想起自己也在Sin ...

  7. make things simple

    以前看过一篇文章,具体内容不记得了,只记得它的结论了:懒是人类进步的源动力.当时觉得结论有点新颖,文中列举了大量的实例证明这个结论,其中重点强调了计算机学科.我本身从事算是计算机相关的工作,对文中的部 ...

  8. Hammer.js分析(三)——input.js

    input.js是所有input文件夹中类的父类,浏览器事件绑定.初始化特定的input类.各种参数计算函数. Input父类和其子类就是在做绑定事件,各种参数计算.整合.设置等返回自定义事件对象,交 ...

  9. Oracle库Delete删除千万以上普通堆表数据的方法

    需求:Oracle数据库delete删除普通堆表千万条历史记录. 直接删除的影响: 1.可能由于undo表空间不足从而导致最终删除失败的问题: 2.可能导致undo表空间过度使用,影响到其他用户正常操 ...

  10. 相克军_Oracle体系_随堂笔记010-SCN

    1.SCN的意义?system change number     时间    先后.新旧 select dbms_flashback.get_system_change_number, SCN_TO ...