初识UML类图--类之间关系
前言
最近有打算学习一下设计模式,所以就去看了园子里面左潇龙大哥的设计模式文章,看完之后只有一个感觉,我啥时候也能写出来这么牛逼的文章啊,但是我这语文老师死的早的人还是算了,但是设计模式还是要学的,这个博客还是要写的,所以还是接着写吧,遵从龙哥的教诲,学习设计模式之前先简单学习一下类图里面各种类的关系,因此就有了这篇随笔,废话不多说,下面进入正文。
类与类之间的关系
类与类之间的关系从弱到强依次是:没有关系(这不是扯淡嘛)、依赖、关联、聚合、组合,还有泛化(其实就是继承)和实现,这俩大哥是在是没地方排了,就随便放着吧,下面一一介绍各个关系:
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类图--类之间关系的更多相关文章
- UML类图中的关系表示
UML类图中的关系和表示方法 类图是用来描述程序中的类以及它们之间的关系的,使用类图可以帮助我们简化对系统的理解.在UML类图中比较常见的关系有六种,它们分别是:依赖.关联.聚合.组合.泛化.实现,这 ...
- 设计模式之UML类图的常见关系
设计模式之UML类图的常见关系 本文来自转载 烧点饭博客 本篇会讲解在UML类图中,常见几种关系: 泛化(Generalization),依赖(Dependency),关联(Association), ...
- 转 UML类图几种关系的总结
UML类图几种关系的总结 在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregati ...
- UML类图的常见关系1
设计模式之UML类图的常见关系(一) 本篇会讲解在UML类图中,常见几种关系: 泛化(Generalization),依赖(Dependency),关联(Association),聚合(Aggre ...
- UML类图几种关系的总结(网摘)
Source link:http://www.open-open.com/lib/view/open1328059700311.html UML类图几种关系的总结 原文出处:[深度开源] 在UML类图 ...
- 【转载】UML类图几种关系的总结
因为有的时候很久不弄UML图,老是忘记几个常见的连接线的意思,这篇完全说转载:UML类图几种关系的总结 在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Real ...
- 2.java面向对象类与类/类与对象之间关系详解
继承.实现.依赖.关联.聚合.组合的联系与区别 下面的内容很基础,同时也很简单,但是也很重要. 继承 指的是一个类(称为子类.子接口)继承另外的一个类(称为父类.父接口)的功能,并可以增加它自己的新功 ...
- UML类图五种关系与代码的对应关系
转: UML类图中的五种关系的耦合强弱比较:依赖<关联<聚合<组合<继承 一.依赖关系: (一)说明 虚线+箭头 可描述为:Uses a 依赖是类的五种关系中耦合最小的一种关系 ...
- [UML][转]UML类图符号 各种关系说明以及举例
修改自:http://www.cnblogs.com/duanxz/archive/2012/06/13/2547801.html UML中描述类和类之间相互关系的方式包括:依赖(Dependency ...
随机推荐
- 玩转动态编译 - 高级篇:二,IL设置静态属性,字段和类型转换
静态属性赋值 先来看 Reflector反射出的IL源码(感谢Moen的提示),这次用 Release模式编译,去掉那些无用的辅助指令 public void AAA(string s) { MyCl ...
- Module Zero之角色管理
返回<Module Zero学习目录> 角色实体 角色管理者 多租户 角色实体 角色实体代表了该应用的一个角色.它应该派生自AbpRole类,如下所示: public class Role ...
- C# 用原生JS进行文件的上传
1.此文章是用原生JS来进行文件的上传,有两个版本,一个不用ajax,一个用ajax. 1)非AJAX <!DOCTYPE html> <html> <head> ...
- 分区函数Partition By的与row_number()的用法以及与排序rank()的用法详解(获取分组(分区)中前几条记录)
partition by关键字是分析性函数的一部分,它和聚合函数不同的地方在于它能返回一个分组中的多条记录,而聚合函数一般只有一条反映统计值的记录,partition by用于给结果集分组,如果没有指 ...
- C语言static
1. static 变量 静态变量的类型说明符是static. 静态变量当然是属于静态存储方式,但是属于静态存储方式的量不一定就是静态变量. 例如外部变量虽属于静态存储方式,但不一定是静态变量,必须由 ...
- [转]Linux常用命令
系统信息arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS / ...
- 前端MVC框架Backbone 1.1.0源码分析(一)
前言 如何定义库与框架 前端的辅助工具太多太多了,那么我们是如何定义库与框架? jQuery是目前用的最广的库了,但是整体来讲jQuery目的性很也明确针对“DOM操作”,当然自己写一个原生态方法也能 ...
- Spring(四)注解配置Ioc
原文链接:http://www.orlion.ga/216/ 一.@Autowired beans.xml配置成如下: <?xml version="1.0" encodin ...
- MVC5 网站开发实践 2.2、管理员身份验证
上次完成了管理员的登录,这次要解决对管理员登录后的验证,采用AuthorizeAttribute属性的方式.之前还要解决几个问题,然后才重写验证类,最后稍微改一下界面. 目录 MVC5 网站开发实践 ...
- 基于Fragment的百度地图框架的使用
博客:http://blog.csdn.net/developer_jiangqq (一)基本介绍(Fragment和SupportMapFragment): Fragment的使用现在安卓APP开发 ...