学习一之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类图可用于描述每一个设计模式的结构以及对模式实例进行说明,而模式结构又是设 ...
随机推荐
- 2048小游戏代码解析 C语言版
2048小游戏,也算是风靡一时的益智游戏.其背后实现的逻辑比较简单,代码量不算多,而且趣味性强,适合作为有语言基础的童鞋来加强编程训练.本篇分析2048小游戏的C语言实现代码. 前言 游戏截图: 游 ...
- nodejs事件循环
1. 只有一个主线程,node开始执行脚本时,会先进事件循环初始化(同步任务,发出异步请求,规划定时器生效时间,执行promise.nextTick等),这是事件循环还未开始. 2. nodejs每一 ...
- [业界良心系列] OI资料分享
正式退役辣....混吃等死了这么久以后....终于也是必然的结果吧.... 分享一些资料: 链接:http://pan.baidu.com/s/1c1SRFmo 密码:bcfc 有一些资料有版权, 如 ...
- [翻译] 编写高性能 .NET 代码--第二章 GC -- 避免使用终结器,避免大对象,避免复制缓冲区
避免使用终结器 如果没有必要,是不需要实现一个终结器(Finalizer).终结器的代码主要是让GC回收非托管资源用.它会在GC完成标记对象为可回收后,放入一个终结器队列里,在由另外一个线程执行队列里 ...
- PHP 个人用到的琐碎代码记录
查找字符串出现次数的方法 substr_count(string,substring,[start],[length]) 函数延迟代码执行若干秒,若成功,返回 0,否则返回 false. sleep( ...
- Asp.Net Core2.0 基于QuartzNet任务管理系统
Quartz.NET官网地址:https://www.quartz-scheduler.net/ Quartz.NET文档地址:https://www.quartz-scheduler.net/doc ...
- 使用C#开发C/S框架高级版添加新项目实例
操作步骤: 1.新建一个项目CSFramework3.test,在CSFramework3.test项目下新建一个FormMan窗口(此时不需要继承). 2.按F7打开类,替换一下引用 using S ...
- java读取数据写入txt文件并将读取txt文件写入另外一个表
package com.xsw.test; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.F ...
- 统计表中 重复出现 XX次以上的数据
在平时使用数据库查询数据时 经常会遇到查询表中出现XX次以上的数据 以前自己遇到就直接百度 然后拿来就用 在过段时间遇到就懵逼了 还得百度.... so 还是加深理解下 省的以后遇到再次一脸 ...
- JDBC批量插入优化addbatch
// 获取要设置的Arp基准的List后,插入Arp基准表中 public boolean insertArpStandardList(List<ArpTable> list) { Con ...