10. UML图
是什么
UML (Unified Modeling Language) ,统一建模语言。
统一:统一标准,按照标准来表达的大家都懂,就像是两个讲普通话的人一样,不管他们是来着什么省,都能够通过普通话来进行交流。建模:建立模型,就是为了理解事物而对事物做出的一种抽象,是对事物的一种无歧义的书面描述。语言:是用于沟通的一套方式,有其符号与处理规则,其目的是交流观念、意见、思想等。
那么把三个词统一起来,就是为了交流思想观念,按照一定的标准对事物进行抽象分析,建立模型。在这里的语言,不同于我们一行行看到的文字,或者是我们口头表达的语音,而是一系列的图形。
按照软件工程的标准表达,UML是一种开放的方法,用于说明、可视化、构建和编写一个正在开发的、面向对象的、软件密集系统的制品的开放方法。
简言之,就是为了表达想法,按照一定的标准,画的画。
有什么用
很多时候,图形涵盖的信息会比文字丰富得多,也容易让人理解。事想一下,你是不是喜欢看电影多个看图片?看图片多过看文字?看长文字多过看短文字?不用否认,我们由读文时代,到后来的读图的时代,随着直播软件和小视频的兴起,我们进入了读片时代,对于绝大多数人来讲,我们会选择我们更容易理解的方式去理解这个世界,而对于不同的媒体而言,视频比图片容易理解,图片也比文字容易理解。
统一标准,可以让大家都在一个频道上面。在粤语里面有个俗语——鸡同鸭讲,意思是鸡和鸭讲话,语言不通,形容两个人并非共同语言,无法沟通。如果我们遇到了一个外国人,不熟悉对方语言的情况下,大概就是这种状态,我们各自说各自的,完全不理解对方的意思,到最后,还不如指手画脚,画张图省事情。软件分析又何尝不是?如果其中的一个人用AML,另外一个人用BML,到最后,大家都不知道大家说些什么。
在软件行业有着广泛的使用,不用也得用。很多结构师在设计系统的时候,并没有直接写系统的文档,而是画图,用不同的条条框框来表示不同的系统,他们部署在什么地方、用不同的正方形长方形来表示类,表示他们之间的调用关系、用流程图来表示一个数据流的流向。如果我们不掌握这些,那么对于架构师设计的系统只能一脸懵逼。
既然我们是讲设计模式,当然在这里说UML图就是为了设计模式,在设计模式当中,我们都会用UML图来表示他们的结构关系,如果看不懂这样的关系,对于我们的学习也会有很大的障碍。
分类和简介
名字 | 介绍 | 图形 |
---|---|---|
用例图 | 用来描述用户是如何使用一个系统的,是用户所能观察和使用到的系统功能的模型图。 | |
类图 | 用来描述系统中的类以及各个类之间的关系。系统中可以有多个类图,单个类图则只是表达了系统的一个方面。类图可以帮助我们在正确编写代码之前对系统有个很全面的认识。 | |
对象图 | 对象图可以认为是类图的特殊情形,是类图元素子集,对象图作为系统在某一时刻的快照,是类图中的各个类在某一时间点上的实例及关系的静态写照。类图只有一个,对象图显示类的多个对象实例。 | |
活动图 | 表示在处理某个活动时,两个或者更多类对象之间的过程控制流。 | |
状态图 | 描述一个对象所处的可能状态以及状态之间的转移。 | |
时序图 | 描述对象之间传送消息的时间顺序,是用来表示用例中的行为顺序。 | |
协作图 | 作用于显示对象之间如何进行交互以执行特点用例或用例中特点部分行为的交互图,它强调的是发送和接收消息的对象之间的组织结构。 | |
组件图 | 是用来描述在软件系统中遵从并实现一组接口的物力的、可替换的软件模块。它所表现的是一种系统静态实现的结构,能够帮助开发人员对系统组成达成一致的认识。 | |
部署图 | 描述系统的硬件配置和部署以及软件的构件和模块在不同节点上分布的模型图。它能够帮助系统相关人员了解系统中各个构件部署在什么硬件上以及硬件之间的交互关系。 |
类图详细说明
在设计模式当中,用得最多的是类图。
类与包
类型 | 图 | PlantUML语法 |
---|---|---|
类 | ||
包 |
关系
类图的六种关系。
关系 | 介绍 | 图 | PlantUML语法 |
---|---|---|---|
继承 | 就是extends,public class Son extends Father 的关系 |
Father<|--Son |
|
实现 | 就是implements,public class ArrayList implements List 的关系 |
List <|..ArrayList |
|
组合 | 关联关系的一种特例,他体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合;整体没有了,那么部分也就没有了 | Human *-- Brain |
|
聚合 | 关联关系的一种特例,体现整体拥有个体,has-a的关系,弱耦合,整体没有了个体还可以存在 | Company o-- Employee |
|
关联 | 强依赖关系,某一个关联类以属性的方式出现在另外一个类中,public class Human {private Water water;} ,人每天都要喝水 |
Human --> Water |
|
依赖 | 弱耦合,关系是具有偶然性的、临时性的、非常弱,在代码上以方法入参的方式进行表示,public class Human{public void fun(Cigarette cigarette)} ,有些人抽烟是为了娱乐,但是大多数人不抽烟 |
Human ..> Cigarette |
制图工具
工欲善其事,必先利其器。一个趁手的工具使用非常重要,这篇博客用得最多的工具是PlantUML,他是一个开源的,由文字转化成图形的工具。PlantUML官方网站、类图语法、画图工作区。
其他的工具这里就不阐述了,只要自己觉得趁手就可以了。