看懂类图——UML类图基础
类图
要学懂设计模式,就需要先看得懂类图,类与类之间的关系是学习设计模式的基础,而在软件工程中,类与类之间的关系是通过UML中的类图来体现。
这篇笔记包含的不会是类图的所有东西,包含的只是各个类之间的关系,包括线条,图形,箭头的含义,熟悉了这些基础,对于设计模式的学习的障碍就会大大降低了
通过实例来学习:

上面的类图就体现了所需要了解的类的6个基本关系
该类图中车是一个抽象类
- 车有两个继承,小汽车和自行车,他们和车之间是实现关系,使用带空心箭头的虚线表示
- 小汽车与SUV之间也是集成关系,他们之间是泛化关系,使用带空心箭头的实线表示
- 小汽车与发动机,轮胎间是组合关系,使用带菱形的实线表示
- 学生与班级之间是聚合关系,使用的是带空心菱形的实线表示
- 学生与身份证之间是关联关系,使用一根实线表示
- 学生上学需要使用自行车,与自行车之间是一种依赖关系,使用带箭头的虚线表示
这六种关系的类图需要掌握并熟练的运用,
_ _ _
类的继承在UML中表现为实现(realize)和泛化(generalize)
实现关系
实现关系使用的是一个带空心箭头的虚线表示。

上述类图我们可以说A实现了B,B是一个抽象概念,在现实中无法直接用来定义对象,只有指明具体的子类,才能用来定义对象.
就像车和小汽车、自行车的关系一样,“车”这个类在C++中用抽象类表示,在Java中大部分情况下用接口表示
泛化关系
泛化关系实际上是对类的一个细分,

最终代码中,泛化关系表现为继承非抽象类;
聚合关系
聚合关系中整体与部分之间是若依赖关系,整体不存在了,部分依然可以独立存在,也就是说部分和整体的生命周期是独立的。
聚合关系在UML中使用带空心菱形的实线表示

例如班级不存在了,学生仍然能够单独存在
组合关系
组合关系中的整体与部分之间是强依赖关系,整体不存在了,部分也就不存在了。例如公司与部门之间的关系,部门是公司的下属机构,如果公司不存在了的话
部门也就没办法独立存在。
组合关系在UML中使用实心菱形的实线表示

关联关系
关联关系是用一条直线表示的;它描述不同类的对象之间的结构关系;它是一种静态关系, 通常与运行状态无关,一般由常识等因素决定的。
它一般用来定义对象之间静态的、天然的结构。 所以,关联关系是一种“强关联”的关系;
比如,乘车人和车票之间就是一种关联关系
关联关系默认不强调方向,表示对象间相互知道;如果特别强调方向,如下图,表示A知道B,但 B不知道A,如下图

注:在最终代码中,关联对象通常是以成员变量的形式实现的;
依赖关系
依赖关系是用一套带箭头的虚线表示的
如下图表示A依赖于B;它描述一个对象在运行期间会用到另一个对象的关系;

显然,依赖也有方向,双向依赖是一种非常糟糕的结构,我们总是应该保持单向依赖,杜绝双向依赖的产生.
在最终代码中,依赖关系体现为类构造方法及类方法的传入参数,箭头的指向为调用关系;依赖关系除了临时知道对方外,还“使用”对方的方法和属性.
小结
上述的6中类之间的关系是类图中最基础的部分,总结如下
- 泛化: 带空心箭头的实线
- 实现: 带空心箭头的虚线
- 聚合: 带空心菱形的实线
- 组合: 带实心菱形的实线
- 关联: 一条实线(表示二者相互知道)带箭头实线(一方只知道另一方)
- 依赖: 带箭头的虚线
看懂类图——UML类图基础的更多相关文章
- (转)看懂类图——UML类图基础
类图 要学懂设计模式,就需要先看得懂类图,类与类之间的关系是学习设计模式的基础,而在软件工程中,类与类之间的关系是通过UML中的类图来体现. 这篇笔记包含的不会是类图的所有东西,包含的只是各个类之间的 ...
- 五分钟读懂UML类图
平时阅读一些远吗分析类文章或是设计应用架构时没少与UML类图打交道.实际上,UML类图中最常用到的元素五分钟就能掌握,下面赶紧来一起认识一下它吧: 一.类的属性的表示方式 在UML类图中,类使用包含类 ...
- 五分钟读懂UML类图(转)
平时阅读一些远吗分析类文章或是设计应用架构时没少与UML类图打交道.实际上,UML类图中最常用到的元素五分钟就能掌握,下面赶紧来一起认识一下它吧: 一.类的属性的表示方式 在UML类图中,类使用包含类 ...
- 五分钟读懂UML类图(转)
平时阅读一些远吗分析类文章或是设计应用架构时没少与UML类图打交道.实际上,UML类图中最常用到的元素五分钟就能掌握,下面赶紧来一起认识一下它吧: 一.类的属性的表示方式 在UML类图中,类使用包含类 ...
- 读懂UML类图
平时阅读一些远吗分析类文章或是设计应用架构时没少与UML类图打交道.实际上,UML类图中最常用到的元素五分钟就能掌握,下面赶紧来一起认识一下它吧: 一.类的属性的表示方式 在UML类图中,类使用包含类 ...
- 面向对象的照妖镜——UML类图绘制指南
1.前言 感受 在刚接触软件开发工作的时候,每次接到新需求,在分析需求后的第一件事情,就是火急火燎的打开数据库(DBMS),开始进行数据表的创建工作.然而这种方式,总是会让我在编码过程中出现实体类设计 ...
- UML类图的6大关系
<小酌重构系列>已经完成了大约1/3了,在这些文章中,我使用了一些简单的类图来描述重构策略.在之后的文章中,我可能会借助稍微复杂一些的UML类图来介绍.但是在此之前,我觉得有必要先介绍一下 ...
- 转:深入浅出UML类图(具体到代码层次)
深入浅出UML类图 作者:刘伟 ,发布于:2012-11-23,来源:CSDN 在UML 2.0的13种图形中,类图是使用频率最高的UML图之一.Martin Fowler在其著作<UML ...
- UML(一) 类图及类间关系
原创文章,同步发自作者个人博客,http://www.jasongj.com/uml/class_diagram/ UML类图 UML类图介绍 在UML 2.*的13种图形中,类图是使用频率最高的UM ...
随机推荐
- 浏览网页之Web服务器
Web服务器... ----------------------------- 网站服务器响应用户请求 ========================= 浏览网页的时候需要翻越一道墙 Firewal ...
- React编写input组件传参共用onChange
之前写页面上的input比较少,所以没有单提出来一个组件,今天研究了下input组件,但共用一个onChange的问题卡了一会儿,查了下发现几个比较好的方法,分享下: 方法一 Input组件 let ...
- php 微信公众号+微商城开发 基于Thinkphp3.2框架开发
说明:本教程是自己自学+自己的理解+扩展(包括学习过程中遇到的一些问题) 参考教程:麦子学院--李忠益--http://www.maiziedu.com/u/70409/ 微盟: http://www ...
- 利用CoreAnimation实现一个时间的进度条
(个人原创,转载请注明出处 http://www.cnblogs.com/pretty-guy/p/7460334.html) 在iOS中实现进度条通常都是通过不停的设置progress来完成的,这样 ...
- 【渗透课程】前言-揭开Web渗透与安全的面纱(必看)
服务器是怎么被入侵的 攻击者想要对一台计算机渗透必须具备以下条件: 1.服务器与客户端能够正常通讯 (服务器是为客户端提供服务的) 2.服务器向客户端提供的权限(服务)或者说是端口. 服务端所提供的服 ...
- Sass初学者超强十分钟入门
ruby安装 因为sass依赖于ruby环境,所以装sass之前先确认装了ruby.先导官网下载个ruby 在安装的时候,请勾选Add Ruby executables to your PATH这个选 ...
- [2017-08-25]100行CSharp代码利用dynamic写个DSL(特定领域语言)
最近看<CLR via C#(第4版)> 读到第五章末尾dynamic基元类型时,看了下作者的一个利用dynamic动态调用string类型的Contains方法(静态方法)的实现,突然发 ...
- Android检查更新下载安装
检查更新是任何app都会用到功能,任何一个app都不可能第一个版本就能把所有的需求都能实现,通过不断的挖掘需求迭代才能使app变的越来越好.检查更新自动下载安装分以下几个步骤: 请求服务器判断是否有最 ...
- python程序之profile分析
操作系统 : CentOS7.3.1611_x64 python版本:2.7.5 问题描述 1.Python开发的程序在使用过程中很慢,想确定下是哪段代码比较慢: 2.Python开发的程序在使用过程 ...
- 一个小时学会Git
一.版本控制概要 Git 是一种在全球范围都广受欢迎的版本控制系统.在开发过程中,为了跟踪代码,文档,项目等信息中的变化,版本控制变得前所未有的重要.但跟踪变化远远不能满足现代软件开发行业的协同需求, ...