【软件设计】UML类图怎么看
前言
无论使用哪种语言,都离不开面向过程与面向对象两个流派,而类图是面向对象程序设计中至关重要的一种软件表达形式,如何看懂类图,并设计好的软件架构,是我们作为软件工程师必不可少的技能之一。
今天小黑把类图学习的一些笔记和心得分享出来,供大家参考。
什么是类
了解类图之前,我们需要简单了解一下类的概念
类(Class)封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性、操作、关系的对象集合的总称。
在面向过程设计中,数据和算法组织成为程序。而面向对象中,数据+算法的理论基础并没有改变,虽然整个程序框架由一个个类组成,每一个类都是独立的数据+算法集合。类的设计遵循单一职责原则,只负责自己的私有数据,调用自己的方法(算法)。通过类将程序组织分类,各自负责各自的逻辑,让整个程序有序化,组织化。
什么是类图
类图(Class Diagram)使用出现在系统中的不同类来描述系统的静态结构,它用来描述不同的类以及它们之间的关系。
类图(Class Diagram)使用出现在系统中的不同类来描述系统的静态结构,它用来描述不同的类以及它们之间的关系。
类图在面向对象设计中用于组织不同之间的关系,无论是文本编程还是图形化的程序,面向对象的程序如果脱离类图,都将变的理解吃力。一张明了的类图,可以让你省去阅读程序的诸多烦恼。
近期,小黑仿作AddLabel工具时,如果你只看程序,理清各个类之间的关系和组织逻辑将会耗费大量的时间,而一张类图就可轻易的表述不同类之间的组织关系。
下图是LabVIEW自带的类图关系,当类与类之间使用继承关系时,比较容易理解,而使用组合关系,没有类图辅助,看起来将比较困难
下图是绘制的类图,从图中可以比较清晰的明确各个类之间的关系

如何看类图
在UML类图中,类使用包含类名、属性和操作且带有分隔线的长方形来表示,使用Label的类图作为例子讲解
在该类图中,包含有三部分,分别是类名、类的属性、类的操作
第一部分是类的名称
每一个类都有一个名称,在UML类图中作为类与类之间的区别
对应的LabVIEW代码如下图所示

第二部分为类类的属性
属性是指类的性质,即类的成员变量。一个类可以有任意多个属性,也可以没有属性。类的属性也即作为最小信息单元的数据结构,每一个类都有属于自己的数据结构。
标准的类图属性由以下内容组成
可见性 名称:类型[缺省值]
这里我们表述的Label由text,textcolor,backgroundColor等属性组成
对应LabVIEW中的数据结构保存于Label.ctl中

这里需要说明的是,属性名称前的-号代表可见性 “可见性”表示该属性对于类外的元素而言是否可见,包括公有(public)、私有(private)和受保护(protected)三种,在类图中分别用符号+、-和#表示。
在LabVIEW同样具有不同访问属性的设计,其中如Label.ctl上方显示的红色小钥匙代表私有(private)属性
使用黄色小钥匙的代表受保护的属性(protected)
如果没有钥匙,则代表访问类型为公有(public)
LabVIEW的私有属性确保了类中的数据只能被类内部访问,外部需要通过访问器才可以更改类内部的数据

第三部分为类的方法
类的方法可以通过如下形式表达:
可见性 名称(参数列表) [ : 返回类型]
Label类中由于SetLabelPosition没有返回值,所以省略不写,只表示这是一个公共的方法,并且有传入的Cluster参数
类图与LabVIEW对应关系如下图所示:

类图的组织关系
在类图中,不同的类之间存在着不同的关系,只有使用合适的表达符号才可以表述不同类之间的关系
继承关系
类与类之间的继承关系,可以表征类的基本特性,类图中,AddWireLabel继承了Actor,所以使用继承的符号来连接两个类图

依赖关系
依赖关系指的是一个类在计算的时候用到了另一个类的参数。而这种使用关系是具有偶然性的、、临时性的、非常弱的,但是B类的变化会影响到A;
## 关联关系
关联(Association)关系是类与类之间最常用的一种关系,它是一种结构化关系,用于表示一类对象与另一类对象之间有联系,如汽车和轮胎、师傅和徒弟、班级和学生等等。

关联关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的、关联可以是
- 双向关联
- 单向关联
- 自关联
多重性关联
聚合关系
聚合是关联关系的一种特例,他体现的是整体与部分、拥有的关系,即has-a的关系,此时整体与部分之间是可分离的,他们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享
这里的Label相对于Segment就是一种聚合关系,判断依据就是,Label不仅可以作为Segment的Label,也可以作为其他如矩形,Wire的label

### 组合关系
组合也是关联关系的一种特例,他体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合;他同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束
这里线和线段的关系就属于组合关系,判断依据就是,如果没有线,线段就不会存在

在Viso中,每一种对应关系都给出了曲线应该具有的表示方法(复合就是组合的意思),有兴趣的可以深入了解

总结
本节作为面向对象基础,向大家介绍了类图的基本识别方法,其他的内容如果感兴趣可以百度或者谷歌相关具体的资料。
后记
小黑最近正在不停的充电中,学习任务比较多,所以没能及时更新相关知识,让大家久等了。后期小黑会给自己制定一些写作计划,保证可以稳定的输出一些文档,期待与大家的互动与交流~
【软件设计】UML类图怎么看的更多相关文章
- Java开发设计——UML类图
Java开发设计——UML类图 摘要:本文主要介绍了UML类图的相关知识. 简介 在UML中,类使用包含类名.属性和操作且带有分隔线的长方形来表示,类图分为三层. 第一层是类的名称,如果是抽象类或接口 ...
- 《GO Home Trash!》UML类图,ER图以及数据库设计
<Go Home Trash!>UML类图 ER图以及数据库中数据表 分析: 这款软件经过我们前期的讨论以及需求分析,确定了用户,客服以及管理员三个实体.在设计UML类图时,对各个实体之间 ...
- UML类图学习总结
1.首先来认识下类图?以及类图的作用 类图(Class diagram)由许多(静态)说明性的模型元素(例如类.包和它们之间的关系,这些元素和它们的内容互相连接)组成.类图可以组织在(并且属于)包中, ...
- UML类图的补充及软件设计原则
UML类图的补充及软件设计原则 UML 从目标系统的不同角度出发,定义了用例图.类图.对象图.状态图.活动图.时序图.协作图.构件图.部署图等 9 种图. 1.uml补充 统一建模语言(Unified ...
- (转)面向对象——UML类图设计
背景:一直以来,对UMl类图的画法不甚理解,但是随着学习的深入,发现熟练掌握UML类图,能够更好理解代码间的逻辑性,而这也是程序设计的基础所在,所以很有必要把UML好好掌握. UML类图新手入门级介绍 ...
- 设计模式学习(二):面向对象设计原则与UML类图
一.UML类图和面向对象设计原则简介 在学习设计模式之前,需要找我一些预备知识,主要包括UML类图和面向对象设计原则. UML类图可用于描述每一个设计模式的结构以及对模式实例进行说明,而模式结构又是设 ...
- 看懂UML类图与时序图
看懂UML类图和时序图 这里不会将UML的各种元素都提到,我只想讲讲类图中各个类之间的关系: 能看懂类图中各个类之间的线条.箭头代表什么意思后,也就足够应对 日常的工作和交流: 同时,我们应该能将类图 ...
- 看懂UML类图和时序图
看懂UML类图和时序图 这里不会将UML的各种元素都提到,我只想讲讲类图中各个类之间的关系: 能看懂类图中各个类之间的线条.箭头代表什么意思后,也就足够应对 日常的工作和交流: 同时,我们应该能将类图 ...
- [转] 看懂UML类图和时序图
PS: 组合关系:实心,一个类A属于另一个类,或多个类,但是类A不能单独存在去使用,A一般是一种抽象的东西 聚合关系:空心,一个类A可以单独存在使用 不论组合聚合,A的方法都会被直接调用. 看懂UML ...
随机推荐
- wsgiref 源码解析
Web Server Gateway Interface(wsgi),即Web服务器网关接口,是Web服务器软件和用Python编写的Web应用程序之间的标准接口. 想了解更多关于WSGI请前往: h ...
- monitor_guiagent
monitor_guiagent monitor_guiagent.sh #!/usr/bin/env bash #filename : monitor_guiagent.sh #Usage: /us ...
- MHA选择主库源码解析
知数堂第5期MySQL实战班学员,第10期MySQL优化班学员,现任职助教. MHA在选择新的主库之前,会先把活着的slave分为几个数组,分别为latest(最靠前的slave数组),pref(优先 ...
- Linux(ubuntu 12.04桌面版) 搭建Android开发环境
因为一些工作上的原因,需要切换到Linux环境下做点开发,我选择的Linux发行版本为ubuntu(我不建议使用fedora,我最开始就是使用的fedora,但发现并不是特别好使,有些插件没办法安装, ...
- 【BZOJ3240】【NOI2013】矩阵游戏(数论)
[BZOJ3240][NOI2013]矩阵游戏(数论) 题面 BZOJ 题解 搞什么矩阵十进制快速幂加卡常? 直接数学推导不好吗? 首先观察如何从每一行的第一个推到最后一个 \(f[i]=a·f[i- ...
- 【SPOJ】Highways(矩阵树定理)
[SPOJ]Highways(矩阵树定理) 题面 Vjudge 洛谷 题解 矩阵树定理模板题 无向图的矩阵树定理: 对于一条边\((u,v)\),给邻接矩阵上\(G[u][v],G[v][u]\)加一 ...
- 洛谷 P2757 [国家集训队]等差子序列 解题报告
P2757 [国家集训队]等差子序列 题目描述 给一个\(1\)到\(N\)的排列\(\{A_i\}\),询问是否存在 \[1 \le p_1<p_2<p_3<p_4<p_5& ...
- 【树状数组】【P2345】 奶牛集会
传送门 Description 约翰的\(N\)头奶牛每年都会参加"哞哞大会".哞哞大会是奶牛界的盛事.集会上的活动很多,比如堆干草,跨栅栏,摸牛仔的屁股等等.它们参加活动时会聚在 ...
- JQuery仿淘宝滚动加载图片
用 JQuery 制作随着显示页面的滚动条的滚动动态加载图片,适用于图片太多的页面,在访问网页时,可以先只加载第一屏要显示的图片,当用户进行向下滚动查看页面的时候,动态去加载这些图片,好处是减少页面第 ...
- linux 下文件重命名/移动/复制命令(转)
linux 下文件重命名/移动/复制命令(转) linux下重命名文件:使用mv命令就可以了, 例:要把名为:abc 重命名为:123 可以这样操作: 重命名:MV命令 1.进入你的文件目录,运行 ...