学习一之UML类图
前言
最近在学习程杰老师的《大话设计模式》,觉得非常不错,就做了一些学习笔记和总结。如果对设计模式很感兴趣的,可以直接阅读书籍,相信会有更多的收获。
本人小菜一枚,如果理解的不对的还请多多指教。
UML类图说明

继承关系
如鸟类要继承动物类时,用空心三角形+实线指向动物类,如下

实现接口
和普通类比,接口类第一层有个<< interface >>标识。当某个类要实现接口时,用空心三角形+虚线指向接口类,如下

关联关系
当一个类“知道”另一个类时,就可以用关联。关联关系用实线箭头表示。如下,企鹅知道天气的变化,则可以用实线箭头指向天气类。在代码中的具体表现为,企鹅类中会有个天气对象的成员属性,该天气类可以在构造函数里实例化。

依赖关系
依赖关系表示一个类需要引用另一个类的对象。和关联关系不同的是,在关联关系中被应用的对象以类的成员属性形式被引用,而依赖关系中被引用的对象通常是在类方法中以局部变量的形式引用。该局部变量可以是类方法的参数,也可以是在类方法中获得的一个实例。比如动物需要新陈代谢,而新陈代谢依赖与水和氧气。在代码中体现为,新陈代谢这个方法需要用到水和氧气这两个对象,但其它类方法不一定需要用到。


聚合关系
聚合关系表示一种弱的“拥有”关系。如A对象可以包含有B对象,但B对象不是A对象的一部分。如雁群和大雁就是一种聚合关系。聚合关系用空心菱形+实线箭头表示。在代码里,雁群会有一个数组,存放大雁对象。具体如下


组合关系(合成关系)
组合关系(也称合成关系)表示一种强的“拥有”关系,强调了部分和整体的关系。注意,部分和整体的生命周期是一样的。如鸟和翅膀就是一个组合关系。组合关系用实心菱形+实线箭头表示。在代码中,为了保证部分和整体的生命周期是一致的,所以在整体类的构造函数中必须初始化部分类实例。具体如下

总结
关联关系和依赖关系,组合关系和聚合关系这几个通常会比较难理清楚。可以通过以下几点来区分
- 关联关系,聚合关系和组合关系都是通过类的成员属性来引用类对象,这三种关系在代码实现上基本相同,只是从业务场景上作区分。
- 依赖关系是通过类方法的局部变量来引用类对象的,所以可以根据这点来判断是否是依赖关系。
- 依赖关系和聚合关系可以看做是一种“弱”关系,所以在画图时都是用虚线和空心菱形。而关联关系和组合关系是一种“强”关系,所以连线时用实线和实心菱形。可以这么理解强弱关系,如相对类成员属性,局部变量影响更小,所以更弱些。
学习一之UML类图的更多相关文章
- 设计模式学习——准备(UML类图)
前言 其实吧,最早接触UML是源于软件设计师的考试,半路出家实在难为我了.学设计模式总是要画类图的,所以补充UML的类图的知识是很重要滴.第一篇就偷懒一点copy别人的东西了.实话说,我们都是踩在巨人 ...
- UML类图关系(泛化 、继承、实现、依赖、关联、聚合、组合)
UML类图关系(泛化 .继承.实现.依赖.关联.聚合.组合) 继承.实现.依赖.关联.聚合.组合的联系与区别 分别介绍这几种关系: 继承 指的是一个类(称为子类.子接口)继承另外的一个类(称为父类.父 ...
- UML[1] UML类图关系(泛化 、继承、实现、依赖、关联、聚合、组合)(转)
转自:http://blog.csdn.net/zhaoxu0312/article/details/7212152 继承.实现.依赖.关联.聚合.组合的联系与区别 分别介绍这几种关系: 继承 指的是 ...
- 【UML】UML类图关系(泛化 、继承、实现、依赖、关联、聚合、组合)
http://www.cnblogs.com/olvo/archive/2012/05/03/2481014.html 继承.实现.依赖.关联.聚合.组合的联系与区别 分别介绍这几种关系: 继承 指的 ...
- UML类图关系(继承、泛化、实现、依赖、关联、聚合、组合)
继承.实现.依赖.关联.聚合.组合的联系与区别 分别介绍这几种关系: 继承 指的是一个类(称为子类.子接口)继承另外的一个类(称为父类.父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者 ...
- UML类图关系表示方法
本文转载: http://blog.csdn.net/fengsh998/article/details/8105631 分类: UML2012-10-24 10:18 1175人阅读 评论(0) 收 ...
- 设计模式学习起点 UML类图笔记
UML类图笔记 大学开设的软件设计课程一般都会学习UML类图,大部分关于设计模式的描述都是使用的UML类图,可以说类图的表示是学习设计模式的起点.UML定义类之间的关系主要有六种:泛化关系.实现关系. ...
- UML学习(二)-----类图
UML学习(二)-----类图 http://www.cnblogs.com/silent2012/archive/2011/09/07/2169946.html http://www.cnblogs ...
- 设计模式学习(二):面向对象设计原则与UML类图
一.UML类图和面向对象设计原则简介 在学习设计模式之前,需要找我一些预备知识,主要包括UML类图和面向对象设计原则. UML类图可用于描述每一个设计模式的结构以及对模式实例进行说明,而模式结构又是设 ...
随机推荐
- Python md5解密
这篇文章原来在我盘里存了好久了~ 16年9月的. 这 Python的长进没多少啊.现在都17.4了 哎~~ Python之POST提交解密MD5 用易语言写出来md5解密软件后感觉一点成就感 ...
- 【Java】多线程初探
参考书籍:<Java核心技术 卷Ⅰ > Java的线程状态 从操作系统的角度看,线程有5种状态:创建, 就绪, 运行, 阻塞, 终止(结束).如下图所示 而Java定义的 ...
- GitLab的安装及使用教程
1.配置yum源 vim /etc/yum.repos.d/gitlab-ce.repo 复制以下内容: [gitlab-ce] name=gitlab-ce baseurl=http://mirro ...
- iterm2 快捷键大全
Mac 原来自带的终端工具 Terminal 不好用是出了名的,虽然最近几个版本苹果稍微做了些优化,功能上,可用性方面增强不少,无奈有个更好用的 Iterm2 摆在那,基本上也就没有多少出场机会了 I ...
- mysql数据库外部无法访问
有以下两种情况: 1.mysql未分配访问权限 格式:grant 权限 on 数据库名.表名 用户@登录主机 identified by "用户密码"; grant select, ...
- Appium基于Python unittest自动化测试 & 自动化测试框架 -- PO并生成html测试报告
基于python单元测试框架unittest完成appium自动化测试,生成基于html可视化测试报告 代码示例: #利用unittest并生成测试报告 class Appium_test(unitt ...
- Android app性能测试小结(7个性能指标)
1.性能测试的几个指标: 2.性能测试环境准备: 3.启动时间 3.1,监控值的获取方法 启动分为冷启动和热启动,冷启动:应用程序首次启动,进程首次创建并加载资源的过程:热启动:应用程序启 ...
- SDP(8):文本式数据库-MongoDB-Scala基本操作
MongoDB是一种文本式数据库.与传统的关系式数据库最大不同是MongoDB没有标准的格式要求,即没有schema,合适高效处理当今由互联网+商业产生的多元多态数据.MongoDB也是一种分布式数据 ...
- wpf 如何让控件左右移动
通过DoubleAnimation可以让控件进行左右移动. <Canvas x:Name="canvas_Shape" HorizontalAlignment="S ...
- 《android开发艺术探索》读书笔记(十四)--JNI和NDK编程
接上篇<android开发艺术探索>读书笔记(十三)--综合技术 No1: Java JNI--Java Native Interface(java本地接口),它是为了方便java调用C. ...