绘图基础知识01-初识UML图
统一建模语言(Unified Modeling Language,UML)是一种为面向对象系统的产品进行说明、可视化和编制文档的一种标准语言,是非专利的第三代建模和规约语言。UML是面向对象设计的建模工具,独立于任何具体程序设计语言。
作用:通过图形对系统分析和模型设计
UML图的四种分类:
1-用例图:从外部用户的角度描述系统的功能,并指出功能的执行者
2-静态图:描述系统的静态结构。类图,对象图,包图
3-行为图:系统的动态行为,描述对象之间的信息传递。交互图,状态图,活动图
4-实现图:描述软件实现系统的组成和分布状况,描述软件实现系统中各个组件及他们之间的依赖关系。常见的有构件图和部署图
用例和用例图
- 场景:开发人员在构造阶段进行分析和设计的基础。
- 用例:是对一个活动这使用系统的一项功能所进行的交互过程的一个文字描述序列,面向对象的软件开发过程是用例驱动的。
- 用例分析:是一种功能分解的技术
组成元素:
1>参与者:
角色:系统以外需要使用系统或与系统交互的东西。
2>用例间的关系:
- 关联关系:行为和角色之间关联
- 包含关系:两个用例之间,一个用例的行为包含另一个用例的行为
- 泛化关系:对行为的泛化
- 扩展关系:扩展关系是在扩展点上增加新的行为和含义
3>用例图
某出版社拟开发一个在线销售各种学术出版物的网上商店(ACShop),其主要的功能需求描述如下:
(1)ACShop在线销售的学术出版物包括论文、学术报告或讲座资料等。
(2)ACShop的客户分为两种:未注册客户和注册客户。
(3)未注册客户可以浏览或检索出版物,将出版物添加到购物车中。未注册客户进行注册操作之后,成为ACShop注册客户。
(4)注册客户登录之后,可将待购买的出版物添加到购物车中,并进行结账操作。结账操作的具体流程描述如下:
①从预先填写的地址列表中选择一个作为本次交易的收货地址。如果没有地址信息,则可以添加新地址。
②选择付款方式。ACShop支持信用卡付款和银行转账两种方式。注册客户可以从预先填写的信用卡或银行账号中选择一个付款。若没有付款方式信息,则可以添加新付款方式。
③确认提交购物车中待购买的出版物后,ACShop会自动生成与之相对应的订单。
(5)管理员负责维护在线销售的出版物目录,包括添加新出版物或者更新在售出版物信息等操作。
交互图
- 用来描述对象之间以及对象与参与者之间动态协作关系以及协作过程中行为次序的图形文档。用来描述一个用例的行为,显示该用例中涉及的对象与对象间的消息传递。
- 包含顺序图和协作图两种形式。
- 场景:针对用例设计的软件实现方法。
顺序图(时序图)
- 水平方向:对象维度
- 垂直方向:时间维度
规则:
- 主动执行者应该在最左边
- 紧邻的是用户界面的边界类
- 再往右是控制类
组成元素:
1)对象 : 对象代表时序图中的对象在交互中所扮演的角色。
2)生命线: 生命线代表时序图中的对象在一段时期内的存在。
3)消息 : 两个对象之间的单路通信,从发送方指向接收方。
- 消息传递有以下几种:
- 同步消息:消息的发送者把控制传递给消息的接收者,然后停止活动,等待消息的接收者放弃或者返回控制。
- 注意:发送人需要等待消息的响应。带实心箭头的实线表示
- 注意:发送人需要等待消息的响应。带实心箭头的实线表示
- 异步消息:消息发送者通过消息把信号传递给消息的接收者,然后继续自己的活动,不等待接受者返回消息或者控制
- 注意:发送人不需要等待消息的响应。带线型箭头的实线表示
- 注意:发送人不需要等待消息的响应。带线型箭头的实线表示
- 返回消息:返回消息表示从过程调用返回
- 注意:带线型箭头的虚线表示。
- 注意:带线型箭头的虚线表示。
- 自关联消息: 自身调用自身的方法,即自我调用的同步消息
- 同步消息:消息的发送者把控制传递给消息的接收者,然后停止活动,等待消息的接收者放弃或者返回控制。
免登录时序图示例:
类图
- 场景:软件实现所需要的类,属性和方法。
1.类,抽象类,接口
- 类:
- 抽象类:
- 接口:
1.抽象类斜体表示;
2.“+”表示public,"-"表示private,"#"表示protected;
3.分三层,类名,属性,方法;
标识方式
-
1.继承关系
- 空心三角(指向父类)+实线;
- 空心三角(指向父类)+实线;
-
2.实现关系
- 空心三角箭头(指向接口)+虚线;
- 空心三角箭头(指向接口)+虚线;
-
3.关联关系
- 用箭头(指向关联类)+ 实线表示;(非必须的关系)
- 用箭头(指向关联类)+ 实线表示;(非必须的关系)
-
4.依赖关系
-
箭头(指向依赖的类)+ 虚线表示;(必须的关系)
-
5.聚合关系
- 空心菱形(指向聚合类)+ 实线 +箭头(指向聚合包含的类)
- 聚合关系相对来说比较难理解一些:表示A对象可以包含B对象,但是B对象不是A对象的一部分;对象具有不同的生命周期。
- 大学生中有的是青年人,但是大学生不必然是青年人,因为有成人大学,一些年过半百的中年人也可能是大学生;
-
6.组合关系
- 实心菱形(指向组合类) + 实线 + 箭头(指向组合元素类)
- 组合关系是部分和整体的关系,组合的元素类必然属于组合类;对象具有相同的生命周期。
状态图
- 主要用于描述一个对象在其生存期间的动态行为,表现一个对象所经历的状态序列,引起状态转移的事件以及隐状态转移而伴随的动作。
- 表示一个对象经过的状态变更,以及引起状态变更的事件,以及因状态变更所引起的事件。
- 示例图:线程状态变更
活动图:
- 活动图复杂的算法过程,用于描述系统工作的流程和并发行为。
几个基本概念:
- 1.活动:标识某个流程中的任务执行,他可以标识某算法过程中语句的执行。
- 2.泳道:活动图中的区域划分,每个活动的职责对所有活动进行划分,每个泳道代表一个责任区。
- 3.分支:根据不同的境界条件转向不同的活动,每个可能的转移是一个分支。
- 4.分叉和回合:多种可能的活动转移中选择一个,如果标识系统或对象中的并发行为,则可以使用分叉和汇合两种建模元素。
- 5.对象流:对象可以作为活动的输入或输出。
包图
- 背景:目标系统的顶层软件结构
- 举例:
- Java中的循环依赖
- Java中的循环依赖
构件图
- 构件是系统中遵从一组接口且提供其实现的物理的,可替换的部分。构件图是现实一组构件以及他们之间的相互关系,包括变异,链接或执行时构件之间的依赖关系。
- 构件就是一个实际文件,可以是以下几种类型:
- 1.部署构件
- 2.工作产品构件
- 3.执行构件
部署图
- 可以用来显示系统中计算节点的拓扑结构和通信路径与节点上运行的软构件等。
UML图的绘制工具
常用的几种:
processon:
- 官网地址:https://www.processon.com
- 特点: 线上绘制,云存储
draw.io:
- 官网地址:https://www.diagrams.net/
- 特点:
- 1.免费
- 2.可以下载终端到PC,云文件可以保存到github
- 3.除了uml图之外,其他类型的例如:工程图,网络图等的绘制也有很好的支持
- 入门的教程:
网上博客:https://www.cnblogs.com/11sgXL/p/16745654.html
planUml:
- 官网地址:https://plantuml.com/zh/sequence-diagram
- 特点:编程式绘制uml图
- IDEA安装插件教程:https://www.cnblogs.com/perferect/p/15151225.html
- 举个例子:(上面免登录时序图的实现代码)
@startuml
participant 用户 as a
participant 商城前端 as b
participant 商城后端 as c
participant 微信平台 as d
participant 用户中心 as e
autonumber
a -> b : 跳转url:带token
b -> d : wx.login : 请求当前微信账户的code
d --> b : 返回账号code
b -> c : 调用/ma or /mp : 微信code
c -> d : 通过code换取用户微信信息
d --> c : 返回用户信息
c -> c: 更新用户微信信息
c --> b : 返回tempUid(关联用户微信信息)
b -> c : 调用/login接口 : 登录信息及tempUid
c -> c : 用户是否已注册用户
c --> e : token获取用户信息
e --> c : 返回用户信息
c --> c : 如果用户未注册,则进行注册
c -> c : 绑定用户与微信信息
note left : 微信信息绑定的userId是当前用户,则忽略 \n 如果不是同一个userId用户,则重新绑定当前登录用户
c --> b : 返回登录accessToken
@enduml