作者 | 逸珺

责编 | 屠敏

来源 | 嵌入式客栈

作为程序猿都最好掌握的一门语言,那就是UML(Unified Modeling Language),统一建模语言(UML)是软件工程领域中一种通用的开发建模语言,旨在提供一种可视化系统设计的标准方法。是开发人员、系统设计人员交流的有效工具。今天来分享一下UML的一些体会,如有错误请帮忙指正。

注:UML工具有很多,本文描述的基于Enterprise Architect。

UML前世今生

UML时间进化线:

说到UML不得不提的三位大神,Grady Booch、Jacobson、James Rumbaugh,三位是UML的创始人,均为软件工程界的权威,除了著有多部软件工程方面的著作之外,在对象技术发展上也有诸多杰出贡献,其中包括Booch方法、对象建模技术(OMT)和Objectory(OOSE)过程。三人被合称为“UML三友”。

面向对象编程方法以及描述符号进化历史:

然后逐步发展到UML2.5标准。

UML目前的官方组织是https://www.uml.org/

宏观看UML

UML用图去描述一个软件系统,从需求、设计、到部署的方方面面都以及覆盖。那么从总体上先来看看UML有哪些图呢?

从描述系统建模目的,UML图可以分成下面4大类:

从建模的动态视角/静态视角,可以这样去分类:

微观看UML

UML由基本的组成可以从三大块去了解:事物/关系/图

事物(Things)

  • 构件事物:UML模型的静态部分,描述概念或物理元素
  • 类:具有相同属性相同操作 相同关系相同语义的对象的描述
  • 接口:描述元素的外部可见行为,即服务集合的定义说明
  • 协作 描述了事物间的相互作用的集合
  • 用例:代表一个系统或系统的一部分行为,是一组动作序列的集合
  • 构件:系统中物理存在,可替换的部件
  • 节点:运行时存在的物理元素
  • 另外,参与者、信号应用、文档库、页表等都是上述基本事物的变体
  • 行为事物:UML模型图的动态部分,描述跨越空间和时间的行为
  • 状态机:描述事物或交互在生命周期内响应事件所经历的状态序列
  • 交互:实现某功能的一组构件事物之间的消息的集合,涉及消息、动作序列、链接
  • 分组事物:UML模型图的组织部分,描述事物的组织结构
  • 注释事物:UML模型的解释部分,用来对模型中的元素进行说明,解释

关系(Relationship)

下面是UML的基础4大关系:

  • 实现(realization)是类元之间的语义关系,其中的一个类元指定了由另一个类元保证执行的契约
  • 泛化(generalization)是一种特殊/一般的关系。也可以看作是常说的继承关系
  • 关联(association)是一种结构关系,它指明一个事物的对象与另一个事物的对象间的联系
  • 依赖(dependency)是两个事物之间的语义关系,其中一个事物(独立事物)发生变化,会影响到另一个事物(依赖事物)的语义

更为详细的描述,看看下面这些表吧:

图(Diagram)

  • 用例图/Use Case Diagram:用于描述系统的参与者与用例间的关系
  • 类图/Class Diagram:•类图以反映类的结构(属性、操作)以及类之间的关系为主要目的,描述了软件系统的逻辑结构,是一种静态建模方法
  • 对象图/Object Diagram: 描述系统类在某个时刻的具体实例化情况,类似系统某时刻对象角度的快照
  • 序列图/Sequence Diagram:描述对象间动态行为在一段时间的行为序列
  • 时序图/Timing Diagram:描述对象在时间维度的动态行为
  • 通讯图/Communication Diagram:类似序列图,相对序列图强调时间维度,通讯着重描述协作的逻辑关系
  • 相互作用概视图/Interaction Overview Diagram:系统高层级的交互描述,可以引用其他序列图、时序图、通讯图、以及交互概视图
  • 复合结构图/Composite Structure Diagram:复合结构图反映了类,接口或组件(及其组件)的内部协作属性来描述一个功能
  • 信息流图/Info Flow Diagram:描述信息在对象间、构件、包、参与者之间的流向
  • 状态机图/State Machine Diagram:用于描述元素在不同状态间如何迁移的逻辑联系
  • 活动图/Activity Diagram:常用于描述系统级行为的实现建模。需要考虑多种因素:逻辑条件、并发、中断、数据访问等等
  • 封装图/包图/Package Diagram:包图描绘了将模型元素组织到包中以及它们之间的依赖关系(包括包导入和包扩展等)。它们还提供相应命名空间的可视化。
  • 构件图/Component Diagram:用于高层级描述系统的组成构件,以及构件间的依赖关系
  • 部署图/Deployment Diagram:描述系统的部署方式(如何部署、部署在什么环境、硬件环境、软件环境等等)
  • .....

用例图

  • 参与者/Actor:图中的小人,表示系统的用户,如人/机器/内部的其他子系统/硬件等
  • 用例/Use Case:图中的椭圆框及描述,描述参与者与系统交互所实现的工作内容经常会配合附加文本进行详细描述。
  • 边界/Boundary:方框,描述框里的都是属于建模对象里的东东,建模的时候可以方便识别与其他系统交互的接口

用例图在UML语言中处于至关重要的位置,所谓4+1架构设计,用例图用于描述系统需求,处于核心位置。属于Use-case drivering 大法的心脏。

类图/ Class Diagram

这个类图描述一个图像管理系统。

对象图/Object Diagram

描述一个图书管理系统某时刻对象的快照。

序列图/Sequence Diagram

此图说明了在交互中满足视图历史用例所需的对象。对象之间的消息流为用户提供了事务历史信息。描述图书管理系统如何查阅历史的操作系列,反应了客户端与各对象间消息传递关系。

时序图/Timing Diagram

这个类似于芯片的时序图概念。下图描述用户在有卡/无卡对系统访问的时间线场景图:

通讯图/Communication Diagram

这是一个嵌入式系统的UML建模,该图描述一个压力控制系统两个主要用例的实现:

  • 压力控制循环,上面的数字以及箭头表示消息传递流向
  • 通过HMI设置压力

交互概视图/Interaction Overview

描述了一个图书管理系统如何从订单发起后的所有交互概要图,每个子图上面的ref表示引用了一个更详细的图,比如Add to Shopping Basket 放入购物篮的具体动作:

复合结构图/Composite Structure

状态机图/State Machine Diagram

这是描述图书订购系统如何登录的状态机图

活动图/Activity Diagram

常见的活动图

带泳道活动图

将活动分组,明确该组活动负责的对象,对象负责该组的全部活动

子活动图

活动图中,某几个活动可以组成一个内聚的子活动。

可中断活动图

这里的中断并不严谨,本图中表示这个活动事物是可以取消的。

封装图/包图/Package Diagram

构件图/ Component Diagram

用以描述构件之间的相互关系。

部署图/Deployment Diagram

总结一下

本文走马观花的将UML大致梳理了一下,并结合EA的例图,将常见的UML图的作用大致描述一遍,供大家参考。对于软件开发人员而言,UML还是很有必要学习掌握的。

uml 时序图_程序猿都应学习的语言:看 25 张图学 UML相关推荐

  1. 程序猿都应学习的语言:看 25 张图学 UML

    作者 | 逸珺 责编 | 屠敏 来源 | 嵌入式客栈 作为程序猿都最好掌握的一门语言,那就是UML(Unified Modeling Language),统一建模语言(UML)是软件工程领域中一种通用 ...

  2. 为什么每个程序员都应该学习C语言?

    为什么每个程序员都应该学习C语言? 每个程序员在他们的编程生涯中都应该学习C语言,因为它有太多难以忽视的好处了.除了它会给你提供更多的工作机会之外,C语言还会教给你更多的关于计算机的知识.它能给我们提 ...

  3. 大学计算机——所有大学生都应学习的一门计算思维基础教育课程,_大学计算机_所有大学生都应学习的一门计算思维基础教育课程...

    中国大学教学 2011年第4期 "大学计算机"--所有大学生都应学习的一门计算思维基础教育课程 战德臣 聂兰顺 徐晓飞 摘 要:当前,大学非计算机专业计算机课程存在知识型/技能型教 ...

  4. 学了java有必要学c语言吗_程序员有必要学习C语言吗?这几点原因很现实

    原标题:程序员有必要学习C语言吗?这几点原因很现实 C语言是编程语言中的一种,有不少程序员会有这样的疑问?难道做程序员就必须要学习C语言吗?甚至有人觉得,我平时的工作中也用不到C语言我为什么要学习呢? ...

  5. 2018上海交大计算机学院,2018年上海交大毕业生,都去哪里了?看这张图就知道![图]...

    周到报道 上海交通大学刚刚发布了<2018年就业质量报告>,2018 年毕业生共 8674 人(不含港澳台及留学生).截至 2018 年 10 月 31 日,就业率为 98.56%.其中, ...

  6. 注释Java搞笑图_程序员的幽默感, 都藏在这些奇葩搞笑的代码注释里了

    在普通人们眼中,程序猿是神秘的,是不修边幅的,是没日没夜加班的工作狂:但在程序猿眼中,自己是帅气的,拯救世界的,一枝梨花压海棠的科技先驱. 程序猿的丰功伟绩,最直接的体现就是像艺术品一样的代码,行云流 ...

  7. 学习C语言的教材、如何成为一名优秀的C程序员、激发程序员创意的6本书、国外程序员推荐:每个程序员都应读的书

    学习C语言的教材 我的C语言是自学的,这些年看过不少教材. 下面,我对其中一些教材做个点评. 1. How to Think Like a Computer Scientist: C version ...

  8. 一般项目中哪里体现了数据结构_优秀程序员都应该学习的数据结构与算法项目(GitHub 开源清单)...

    前言 算法为王. 想学好前端,先练好内功,内功不行,就算招式练的再花哨,终究成不了高手:只有内功深厚者,前端之路才会走得更远. 强烈推荐 GitHub 上值得前端学习的数据结构与算法项目,包含 gif ...

  9. 虚继承是什么意思_程序猿是什么意思?程序员为什么叫程序猿?程序猿笑话段子-360常识网...

    程序员不是你们眼中的程序猿.程序猿是一种非常特殊的.可以从事程序开发.维护的动物.一般分为程序设计猿和程序编码猿,但两者的界限并不非常清楚,都可以进行开发.维护工作,特别是在中国,而且最重要的一点,二 ...

最新文章

  1. 4.9 总结-深度学习第一课《神经网络与深度学习》-Stanford吴恩达教授
  2. 机器学习——梯度下降算法
  3. 武汉大学计算机学院毕业合影,武大校长对毕业合影有求必应
  4. [数据结构] 二叉树基础
  5. linux系统运维指南 pdf_linux运维:系统监控命令实践
  6. html标记的索引,基于HTML标记分析及中文切词的网页索引研究与实现
  7. java(线程特性,Volatile作用,java内存模型)
  8. Redis之Ubuntu开机启动
  9. 悲痛!南京大学又一女博士跳楼身亡!半年已4位…
  10. maven多层项目配置
  11. ubuntu20.04 搭建tftp服务器
  12. 华为模拟器eNSP免费下载
  13. android 热点 连接电脑上网,安卓手机做wifi热点让笔记本上网的方法
  14. 如何搭建简易又安全的企业内部文件服务器?
  15. 嵌入式与通用计算机的相同点,嵌入式计算机与通用计算机的区别与联系
  16. 今天分享一个用Python来爬取小说的小脚本!(附源码)
  17. 《小强升职记》读后感
  18. ffmpeg 命令图片和视频相互转换
  19. 子墨庖丁Android的ActionBar源码分析 (一)实例化
  20. 非对称密钥PKCS#1和PKCS#8格式互相转换(Java)

热门文章

  1. android 贝塞尔曲线_OpenGL 实践之贝塞尔曲线绘制
  2. python编程理论_Python并发编程理论篇,来看看
  3. 【OpenCV 例程 200篇】98. 统计排序滤波器
  4. 【OpenCV 例程200篇】92. 指数噪声、均匀噪声、椒盐噪声
  5. python基础课程4(看代码看注释)--爬虫爬取网页信息
  6. vue 引用网络css_vue如何引用其他组件(css和js)
  7. python定义数列每项的变量__Python定义方法
  8. python curl 获取返回值_python获取系统命令的返回值 | curl in python
  9. 泰坦尼克号数据集_机器学习入门—泰坦尼克号生存率预测
  10. python并发编程6-协程