程序员这生必须掌握的两种图形
目录
背景
-
从客观上来看,程序员经常会碰到这样的情况:很简单的一个需求用文字罗列了很大篇幅,词不达意,讲不到重点,且逻辑混乱。
-
从主观上来讲:程序员是一项需要终身学习的职业:包括学习各种技能、工具、训练自身思维、提升创造能力等,在学习过程中各种各样的知识需要厘清脉络。
图解思考
图解思考已经成为了技术人员的一项基础技能。何谓图解思考:就是用画图的方式来直观表示出我们思考的内容,这有利于我们对所思考问题的解答。
常言道,一图胜千言,在表达技术逻辑上,我们必须要掌握以下两种图形:流程图与结构图。
流程图
流程图是一个动态关系,描述的是固有规律的活动个体,通过一系列特定逻辑的设定,完整体现价值的过程。
基本流程图
“流程”+“图”,能够让我们直观上看到重点信息及其中的逻辑关系:
泳道图属于流程图
比如在理清敏捷开发的脉络这篇文章中,通过流程图可以清晰地将多个个体的活动与前后逻辑关系表达清楚。
程序时序图
再比如:SpringBoot实现微信小程序登录这篇文章中引用到了微信小程序官方的登录交互流程图,通过该图,开发者可以根据图中的时序及逻辑关系,顺利地完成架构设计与程序开发。
流程图工具
除了我们经常用的mircosoft office visio客户端工具外,再介绍一个网站:processOn,利用该网站无需担心下载和更新的问题,不管Mac还是Windows,一个浏览器就可以随时随地的作图。
结构图
流程图帮我们理清了价值流,程序时序、数据流等动态关系。那结构图就是让程序员进行头脑风暴,把某项事物进行分层分解,形成结构化思维。
比如在Java集合架构常用类与Iterator迭代器文章中,通过结构图可以清晰表达了架构的层次关系及常用类型,这里的图形表示比文字描述更能达意。
层次结构图
思维导图
结构图的作用不止如此,比如我们一直用到的思维导图:思维导图,不止是一个整理和记忆工具,而是思考工具。
比如java程序员经常整理地技术栈的思维导图, 通过思维导图的推导,可以扩展出了更大的空间。
##### 生活中的应用
不光是在工作中,在生活中我们也可以运用结构化思维进行思考:
结语
思考问题的时候,如果只是在脑子里面想,那么只是反反复复围绕少数几个概念或者想法绕来绕去;如果这时你把想法随手画下来,边画边想的过程中可能会出人意料地诞生出许多新的思路。
绘制草图是建筑设计师、工业设计师的一项必备技能,设计师不仅用草图表现自己的思考,更用草图推进自己的思考。同理绘制流程图与结构图,也是程序员必备的一项技能,流程图与结构图的运用,能对思维进行特殊训练,对逻辑进行清晰表达。将思维转化为图像,让思考形成自己的形状是程序员这生必须掌握的技能。
https://www.cnblogs.com/zhuhuix/p/12970401.html#%E6%B5%81%E7%A8%8B%E5%9B%BE%E5%B7%A5%E5%85%B7
===================================================================================================================================================
程序员必备画图技能之——时序图
什么是时序图#
时序图(Sequence Diagram),又名序列图、循序图,是一种UML交互图。它通过描述对象之间发送消息的时间顺序显示多个对象之间的动态协作。
使用场景#
时序图的使用场景非常广泛,几乎各行各业都可以使用。当然,作为一个软件工作者,我这边主要列举和软件开发有关的场景。
1. 梳理业务流程
一般的软件开发都是为了支撑某个具体的业务。有时候业务的流程会比较复杂,涉及到多种角色,这时就可以使用时序图来梳理这个业务逻辑。这样会使业务看起来非常清晰,代码写起来也是水到渠成的事情了。
2. 梳理开源软件
作为一个合格的程序员,阅读源代码的能力一定要过关。一般成熟框架的源代码调用深度都比较深,类之间的调用关系也比较复杂。我喜欢用时序图来梳理框架中这些对象之间的关系。比如再看Tomcat启动流程的过程中,我就时序图梳理了各个组件之间的关系,看起来层次非常清楚,也便于记忆。
时序图的角色#
我们在画时序图时会涉及下面7种元素:
-
角色(Actor)
-
对象(Object)
-
生命线(LifeLine)
-
控制焦点(Activation)
-
消息(Message)
-
自关联消息
-
组合片段。
其中前6种是比较常用和重要的元素,最后的组合片段元素不是很常用,但是比较复杂。我们先介绍前6种元素,再单独介绍组合片段元素。
1. 角色(Actor)
系统角色,可以是人或者其他系统和子系统。以一个小人图标表示。
2. 对象(Object)
对象位于时序图的顶部,以一个矩形表示。对象的命名方式一般有三种:
-
对象名和类名。例如:华为手机:手机、loginServiceObject:LoginService;
-
只显示类名,不显示对象,即为一个匿名类。例如::手机、:LoginSservice。
-
只显示对象名,不显示类名。例如:华为手机:、loginServiceObject:。
3. 生命线(LifeLine)
时序图中每个对象和底部中心都有一条垂直的虚线,这就是对象的生命线(对象的时间线)。以一条垂直的虚线表。
4. 控制焦点(Activation)
控制焦点代表时序图中在对象时间线上某段时期执行的操作。以一个很窄的矩形表示。
5. 消息(Message)
表示对象之间发送的信息。消息分为三种类型。
-
同步消息(Synchronous Message)
消息的发送者把控制传递给消息的接收者,然后停止活动,等待消息的接收者放弃或者返回控制。用来表示同步的意义。以一条实线和实心箭头表示。 -
异步消息(Asynchronous Message)
消息发送者通过消息把信号传递给消息的接收者,然后继续自己的活动,不等待接受者返回消息或者控制。异步消息的接收者和发送者是并发工作的。以一条实线和大于号表示。
-
返回消息(Return Message)
返回消息表示从过程调用返回。以小于号和虚线表示。
6. 自关联消息
表示方法的自身调用或者一个对象内的一个方法调用另外一个方法。以一个半闭合的长方形+下方实心剪头表示。
下面举例一个时序图的列子,看下上面几种元素具体的使用方式。
7. 组合片段
组合片段用来解决交互执行的条件和方式,它允许在序列图中直接表示逻辑组件,用于通过指定条件或子进程的应用区域,为任何生命线的任何部分定义特殊条件和子进程。组合片段共有13种,名称及含义如下:
组合名称 | 组合含义 |
---|---|
ref | 引用其他地方定义的组合片段 |
alt | 在一组行为中根据特定的条件选择某个交互 |
opt | 表示一个可选的行为 |
break | 提供了和编程语言中的break类拟的机制 |
par | 支持交互片段的并发执行 |
seq | 强迫交互按照特定的顺序执行 |
strict | 明确定义了一组交互片段的执行顺序 |
neg | 用来标志不应该发生的交互 |
region | 标志在组合片段中先于其他交互片断发生的交互 |
ignore | 明确定义了交互片段不应该响应的消息 |
consider | 明确标志了应该被处理的消息 |
assert | 标志了在交互片段中作为事件唯一的合法继续者的操作数 |
loop | 说明交互片段会被重复执行 |
组合片段的功能平时用的不是很多,具体使用时可以参考本文最后关于组合片段的文章,这边不做深入介绍了。
画图工具推荐#
- ProcessOn是一个在线作图工具的聚合平台,它可以在线画流程图、思维导图、UI原型图、UML、网络拓扑图、组织结构图等等,您无需担心下载和更新的问题,不管Mac还是Windows,一个浏览器就可以随时随地的发挥创意,规划工作;
- 您可以把作品分享给团队成员或好友,无论何时何地大家都可以对作品进行编辑、阅读和评论;
- ProcessOn不仅仅汇聚着强大的作图工具,这里还有着海量的图形化知识资源我们尽可能的将有价值的知识进行梳理,传递到您的眼前。
参考#
- https://blog.csdn.net/fly_zxy/article/details/80911942(重点参)
- http://baijiahao.baidu.com/s?id=1561926824533534&wfr=spider&for=pc
- 组合片段
https://www.cnblogs.com/54chensongxia/p/13236965.html
===================================================================================================================================================
参考:
https://www.cnblogs.com/zhuhuix/p/12970401.html#%E6%B5%81%E7%A8%8B%E5%9B%BE%E5%B7%A5%E5%85%B7
标签:片段,流程图,泳道,时序,程序员,消息,UML,交互 From: https://www.cnblogs.com/rebrobot/p/18469811