为啥要画图
复杂问题、复杂系统的根本解决之道,归根结底就是两个字:分解。
对问题的分析、分解过程,借助图形化的表达,可以达到“一图胜千言”的效果,于人于己好处多多。
图形表达的过程,即是建模的过程。
所谓模型,就是对复杂问题进行分析、解构后的结构化、逻辑化、专业化的表达和描述,是对复杂问题的专业合理简化的结果。
通过对系统需求的梳理、分析、分解和重新归纳、综合,最终形成的、能够反映软件系统设计和实现的图形表达和描述,就是软件设计模型。
所以,图制作的关键,不是在于熟悉和熟练使用几种图形元素,而更在于,真正理解“模型”这个词的意思和意义,通过合理的过程定义和图形使用,反映出业务逻辑的处理过程和实现上的逻辑划分。
画图软件(必备)
很多人都在使用xmind ,亿图图,Visio,OmniGraffle,draw,迅捷画图,Zen Flowchart ,我自己也都试过了,基本都不满足我自己的需求:直到有一天我看见我朋友用的processon我发现这就是我想要的最佳画图软件
- 各种手机,pc,web ,app 都能适配
- 大量的免费模板
- 大量的素材图片
- 支持粘贴上传
- 自动对齐美化
- 云存储
- 团队协作
- 作品分享和作品卖钱
- 高清图片格式导出
- 各种市面上常用的格式导入
我自己常用的画图软件processon
这个软件是免费的,基本日常够用了,本教程的全部图都能在这个软件中画出来,而且支持各种设备端点击上连接送会员7天
流程图
流程图是对过程、算法、流程的一种图像表示,在技术设计、交流及商业简报等领域有广泛的应用。通常用一些图框来表示各种类型的操作,在框内写出各个步骤,然后用带箭头的线把它们连接起来,以表示执行的先后顺序。用图形表示算法,直观形象,易于理解。有时候也被称之为输入-输出图。顾名思义,就是用来直观地描述一个工作过程的具体步骤。这种过程既可以是生产线上的工艺流程,也可以是完成一项任务所必需的管理过程。
为什么要画流程图?
一张简明的流程图,不仅能促进产品经理与设计师、开发者的交流,还能帮助我们查漏补缺,避免功能流程、逻辑上出现遗漏,确保流程的完整性。流程图能让思路更清晰、逻辑更清楚,有助于程序的逻辑实现和有效解决实际问题。
通常,对于任何希望创建流程的人来说,无论创建的是什么用的流程,流程图都是很有用的。它可以帮你:
- 设计你产品的交互流程
- 确保的你的产品在任何时候都是友好的(甚至包括你原来根本未曾考虑过的故障发生时)
- 帮助你整合零散的线框图
- 帮助你与不同背景的同事进行沟通,比如引导工程师开发
流程图的基本元素:
演示
举个例子,一个公司的产品检验流程可以用如下的流程图来表示:
多业务关联的流程图
泳道+泳池+流程图
画流程图时需要注意哪些问题?
1、绘制流程图时,为了提高流程图的逻辑性,应遵循从左到右、从上到下的顺序排列,而且可以在每个元素上用阿拉伯数字进行标注。
2、从开始符开始,以结束符结束。开始符号只能出现一次,而结束符号可出现多次。若流程足够清晰,可省略开始、结束符号。
3、当各项步骤有选择或决策结果时,需要认真检查,避免出现漏洞,导致流程无法形成闭环。
4、处理符号应为单一入口、单一出口。
5、连接线不要交叉。
6、如果两个同一路径的下的指示箭头应只有一个。
7、相同流程图符号大小需要保持一致。
8、处理为并行关系,可以放在同一高度。
9、必要时应采用标注,以此来清晰地说明流程。
10、流程图中,如果有参考其他已经定义的流程,不需重复绘制,直接用已定义流程符号即可。
时序图
时序图,通常被开发者用来对一个场景下的对象交互建模. 它解释了一个系统中的不同部件之间,彼此是通过怎样的交互来实现的某个功能, 以及特定场景下交互发生的顺序.简而言之,时序图展示了系统的不同部件的执行序列.
我们在画时序图时常用的6种元素:
架构图
业务架构
使用一套方法论/辑对产品(项目)所涉及到的业务进行边界划分,所以熟悉业务是关键,如下图所示某业务中台架构图:
应用架构
它是对整个系统实现的总体上的架构,需要指出系统的层次、系统开发的原则、 系统各个层次的应用服务。如下图所示,就将系
技术架构
技术架构是应接应用架构的技术需求,并根据识别的技术需求,进行技术选型, 把各个关键技术和技术之间的关系描述清楚。技术架构解决的问题包括:纯技术层面的分层 开发框架的选、开发语言的选、涉及非功能性需求的技术选等。
部署架构拓扑图
部署图是用来显示系统中软件和硬件的物理架构,从部署图中,可以了解到软件和硬件组件之间的物理关系以及处理节点的组件分布情况。主要的作用就是表明,你的这个项目(系统)需要多少台服务器,每个服务器是干啥的
网络拓扑图
网络拓扑图就是指用传输媒体互联各种各样机器设备的物理布局,即哪种方法把互联网中的电子计算机等机器设备相互连接。拓扑绘画出云端服务器、服务中心的互联网配备和相互之间的联接。互联网的拓扑结构有很多种多样,关键有星型结构、环形结构、分布式结构、树形结构等
E-R图
E-R图,也称为实体关系图,用于显示实体集之间的关系。它提供了一种表示实体类型、属性和连接的方法;用来描述现实世界的概念模型。ER模型是数据库的设计或蓝图,将来可以作为数据库来实现。
-
实体
实际问题中客观存在的并且可以相互区别的事物称为实体。实体是现实世界中的对象,可以具体到人,事,物。可以是学生,教师,图书馆的书籍。 -
属性
实体所具有的某一个特性称为属性,在E-R图中属性用来描述实体。比如:可以用“姓名”“姓名”“出生日期”来描述人。 -
实体集
具有相同属性的实体的集合称为实体集。例如:全体学生就是一个实体集,(983573,李刚,男,1999/12/12)是学生实体集中的一个实体。 -
键
在描述实体集的所有属性中,可以唯一标识每个实体的属性称为键。键也是属于实体的属性,作为键的属性取值必须唯一且不能“空置”。 -
实体型
具有相同的特征和性质的实体一定有相同的属性,用实体名及其属性名集合来抽象和刻画同类实体称为实体型,其表示格式为:实体名(属性1,属性2,……) -
联系
世界上任何事物都不是孤立存在的,事物内部和事物之间都有联系的,实体之间的联系通常有3种类型:一对一联系,一对多联系,多对多, 多对一联系。
绘制实体关系图
实体(方框表示),联系(菱形表示),属性(椭圆表示),联系(直线表示)
案例:
类图
类图是用来描述一个系统的静态结构。它既可以用于一般概念建模也可以用于细节建模。类包含了数据和行为,是面向对象的重要组成部分,它是具有相同属性、操作、关系的对象集合的总称。
类画法:
- 类名称(如果是接口或抽象,就使用斜体表示)
- 类的特性(一般是类的字段和属性,可以没有)
- 类的操作(一般是类的方法或行为)
类属性或者操作的访问修改符的标注:
- public用加号标注
- private用减号标注
- protected用#号标注
接口的画法
- 顶端有<<interface>>
- 第一行:接口名称
- 第二行:接口方法
类的关系
所谓依赖关系,就是构造这个类的时候,需要依赖其他的类,比如:动物依赖水和氧气
继承、泛化关系(用带空心三角形的实线表示)
继承(泛化)关系,它指定了子类如何特化父类的所有特征和行为。例如:鸟是动物的一种,企鹅、鸭、大雁是鸟的一种。
实现接口的关系
类与接口的关系,表示类实现了接口的所有特征和行为
关联关系(用实箭线表示)
所谓关联关系,就是这个类有一个属性是其他类。
聚合关系(用带空心菱形的实线表示)
聚合关系是关联关系的一种,是强的关联关系 ;
特点: 部分对象的生命周期并不由整体对象来管理。也就是说,当整体对象已经不存在的时候,部分的对象还是可能继续存在的。比如:一只大雁脱离了雁群,依然是可以继续存活的。
用代码的形式表示就是一个燕群类中存储了多个大雁,并且燕群类中有统一操作燕群的属性和行为
组合关系(用带实心菱形的实线表示)
组合关系同样是关联关系的一种,是比聚合关系还要强的关系。
特点:在组合中,部分与整体生命期一致,部分与组合同时创建并同时消亡 。比如:鸟与翅膀的关系。
状态图
1,状态图(State Diagram)用来描述一个特定对象的所有可能状态及其引起状态转移的事件
2,描述哪些状态之间可以转换
3,不同的状态下有不同的行为
状态图的组成
UML状态图主要由五种元素组成,分别是状态、转换、事件、动作和活动。
**状态:**表示对象的生命周期中的一种条件/情况,有初态和终态之分
转换: 表示两种状态间的一种关系
**事件:**表示在某一时间与空间下所发生的有意义的事情
**动作:**表示一个可执行的原子操作,是UML能够表达的最小计算单元
**活动:**表示状态机中的非原子执行,一般由一系列动作组成
状态图的图形
注意: 初始状态只有一个,结束状态可以有多个, 遇到终止全部结束(非法操作)
用例图
用例图是用户与系统交互的最简表示形式,展现了用户和与他相关的用例之间的关系。通过用例图,人们可以获知系统不同种类的用户和用例。用例图也经常和其他图表配合使用。
用例图主要用来描述角色以及角色与用例之间的连接关系。说明的是谁要使用系统,以及他们使用该系统可以做些什么。一个用例图包含了多个模型元素,如系统、参与者和用例,并且显示这些元素之间的各种关系,如泛化、关联和依赖。它展示了一个外部用户能够观察到的系统功能模型图。
【用途】:帮助开发团队以一种可视化的方式理解系统的功能需求。
用例图所包含的的元素
- 参与者(Actor)
- 用例(Use Case)
- 关联关系(Association)
- 包含关系(Include)
- 扩展关系(Extend)
- 泛化关系(Generalization)
参与者(Actor)——与应用程序或系统进行交互的用户、组织或外部系统。用一个小人表示
用例(Use Case)——用例就是外部可见的系统功能,对系统提供的服务进行描述。用椭圆表示
子系统(Subsystem)——用来展示系统的一部分功能,这部分功能联系紧密。
.关联关系(Association)——表示参与者与用例之间的通信,任何一方都可发送或接受消息。
无箭头
,将参与者与用例相连接,指向消息接收方。
包含关系(Include)—— 包含关系用来把一个较复杂用例所表示的功能分解成较小的步骤。
指向分解出来的功能用例。 比如下面这图,用户取钱过程中包含输入账户密码和验证,如果通过了才能取钱
扩展关系(Extend)——扩展关系是指用例功能的延伸,相当于为基础用例提供一个附加功能。
泛化关系(Generalization)——就是通常理解的继承关系,子用例和父用例相似,但表现出更特别的行为;子用例将继承父用例的所有结构、行为和关系。
依赖关系(Dependency)——用带箭头的虚线表示,表示源用例依赖于目标用例。
下面提供以上图形的案例提供参考