作者 | 逸珺

责编 | 屠敏

来源 | 嵌入式客栈

作为程序猿都最好掌握的一门语言,那就是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还是很有必要学习掌握的。

更多精彩推荐
☞从微信「拍一拍」,我想到了那些神奇的一行代码功能
☞AI 又进阶!除了鉴别 PS 图片,还能一键卸妆!
☞无代码开发到底是不是伪需求?
☞程序员端午炫富指南~
☞Spring 从入门到入土——AOP 就这么简单!| 原力计划
☞硬核!国外开发者用 25 美元做了个区块链警佩相机!
☞Python 玩出花儿了!一文教你用 Python 制作吃豆人游戏!| 附代码
你点的每个“在看”,我都认真当成了喜欢

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

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

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

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

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

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

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

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

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

  5. 每个程序员都该学习的5种开发语言

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 原文出处:https://dzone.com/articles/5-programming-language ...

  6. scala语言的底层是java实现的_2020了,每个程序员都该学习的 5 种开发语言

    我曾在某处读到过(可能在<代码大全>,但我不敢确定),程序员应该每年学习一门新的编程语言.但如果做不到,我建议,你至少学习以下 5 种开发语言,以便你在职业生涯有很好的表现. 每个公司都喜 ...

  7. 国外程序员推荐:每个程序员都应读的书(作为一个码奴,这个也留着)(转)

    国外程序员推荐:每个程序员都应读的书(作为一个码奴,这个也留着)(转)来源: 方健的日志 国外程序员推荐:每个程序员都应读的书 来自:http://www.williamlong.info/archi ...

  8. 每个程序员都应读的书

    国外程序员推荐:每个程序员都应读的书 作者 fmms 2012-03-18 21:33:31 编者按:2008年8月4日,StackOverflow 网友 Bert F 发帖提问:哪本最具影响力的书, ...

  9. java程序猿必读的学习书籍,良心推荐!

    每年都有很多人想要学习java技术,有的是自学,有的是报班学习,但是都免不了要看书籍学习,书籍学习带来的知识更加牢记,也可以随时做笔记,下面小编就为大家推荐java程序猿必读的学习书籍,希望能帮助到大 ...

最新文章

  1. 【Qt】QT_BEGIN_NAMESPACE 和 QT_END_NAMESPACE
  2. 生命如何在复杂环境中生存?信息、调控和几何结构的交织
  3. Quartz-TriggerListener解读
  4. ios获取设备信息总结
  5. 三连冠!百度PARL 拿下NeurIPS 2020电网调度竞赛双赛道冠军
  6. Javaassist简介
  7. P1537 弹珠 背包可行性dp
  8. 看完就会明白windows RT推出的原因、它和window 8到底有些什么区别、微软有什么战略企图--有关于微软Windows RT 你不知道的那些事
  9. 页面的主题标记--body
  10. 基于Python+Django+Mysql的图书管理系统
  11. sql XML处理,sp_xml_preparedocument,openxml
  12. java jar命令来运行jar包
  13. huffman树_Java使用哈夫曼树实现文件压缩的原理及实现
  14. 总结:常用的 Python 爬虫技巧
  15. 农行笔试编程题(Java)记录
  16. 算法面试基础:LR(逻辑回归)
  17. 操作系统原理(哈工大-李治军老师)实验三系统调用
  18. 计算机修复开机按什么,电脑蓝屏修复按哪个健?
  19. 生物信息分析服务器平台,高通量数据生物信息分析平台
  20. oracle先决条件内存,oracle11g安装客户端检查先决条件失败

热门文章

  1. 剑指offer.从未到头打印链表
  2. jzoj3771. 【NOI2015模拟8.15】小 Z 的烦恼
  3. ASP.NET Core 3.0 实战:构建多版本 API 接口
  4. python 解析命令行
  5. 5.Ray-Handler之ToReadHandler编写
  6. k64 datasheet学习笔记3---Chip Configuration之System modules
  7. HTTP 404 - 未找到文件 怎么样解决
  8. ModelSim6.3 使用教程By Sunev
  9. SAS Viya调研概述
  10. 主从模式在不同场景下的解释