移动架构 (一) 架构第一步,学会画各种 UML 图
注意: 文章中 UML 图开始用是 Windows PowerDesigner 工具,后来换电脑了用的 StarUML。
UML
定义
UML 是统一建模语言, 是一种开放的方法,用于说明、可视化、构建和编写一个正在开发的、面向对象的、软件密集系统的制品的开放方法。
作用
- 帮组开发团队以一种可视化的方式理解系统的功能需求。
- 有利于开发团队队员之间在各个开发环节间确立沟通的标准,便于系统文档的制定和项目的管理。因为 UML 的简单、直观和标准性,在一个团队中用 UML 来交流比用文字说明的文档要好的多。
- UML 为非专业编程人士理解软件的功能和构造,提供了一种直白、简单、通俗的方法。
- 使用 UML 可以方便的理解各种框架的设计方式。
面向对象模型
用例图 (User Case Diagram)
概述
- 用例图主要模拟系统中的动态行为,并且描述了用户、需求、以及系统功能单元之间的关系。
- 用例图由参与者 (用户) ,用例 (功能) 和它们之间的关系组成。
目的
- 用来收集系统的要求。
- 用于获取系统的外观图。
- 识别外部和内部影响因素。
- 显示要求之间的相互作用是参与者。
构成元素
组成元素 | 说明 | 符号表示 |
---|---|---|
参与者 (Actor) | 表示与你自己的程序或者系统进行正在交互的动作。用一个小人表示 | |
用例 (User Case) | 表示在一个系统或者程序中某个功能的描述。用一个椭圆代表 | |
关联关系 (Association) | 表示参与者与用例之间的关系。用一个箭头表示 | |
包含关系 (Include) | 表示一个大的功能分解成多个小模块的动作。用一个带包含文字的虚线箭头表示 | |
扩展关系 (Extend) | 表示用例功能的延伸,相当于是为用例提供附加功能。用一个带扩展文字的虚线箭头表示 | |
依赖 (dependency) | 表示一个用例依赖于另一个用例(相当于程序里面的一个类引用另一个类的关系)。用一个带依赖文字的虚线箭头表示 | |
泛化 (Generalization) | 相当于程序里面的继承关系。用一个箭头表示 |
用例图例子
需求: 以一个登录的例子来画一个用例图
- 包含 登录/注册/
- 登录/注册 支持手机号码、第三方 QQ/weichat/GitHub 登录注册
效果图:
提供的登录用例基本上已经包含了刚刚所学的组成元素部分。
结构图
类图 (Class Diagram)
概念
类图 (Class Diagram) 是显示了模型的静态结构,特别是模型中存在的类、类的内部结构以及它们与其它类的关系等。
类图不显示暂时性的信息,类图是面向对象建模的主要组成部分。它即用于应用程序的系统分类的一般概念建模,也用于详细建模,将模型转换成编程代码。
构成元素
类图例子
需求: 基于 google 官方 MVP 架构 绘制一个基本的 MVP 类图架构
组合结构图 (Composite Structure Diagram)
概念
用来显示组合结构或部分系统的内部构造,包括类、接口、包、组件、端口和连接器等元素。比类图更抽象的表示,一般来说先画组合结构图,再画类图。
构成元素
注意事项
侧重类的整体特性,就用类图;侧重类的内部结构,就使用组合结构图。
组合结构图例子
对象图 (Object Diagram)
概念
显示某时刻对象和对象之间的关系
构成元素
构成元素 | 说明 | 表示符号 |
---|---|---|
对象 (Object) | 代表某个事物 | |
实例链接 (Instance Link) | 链是类之间关系的实例 | |
依赖 (Dependency) | 想当于 A 对象使用 B 对象里面的属性 |
对象图例子
包图 (Package Diagram)
概念
包与包的之间的关系
构成元素
包图例子
动态图
时序图 (Sequence Diagram)
概念
时序图(Sequence Diagram) , 又名序列图、循序图、顺序图,是一种UML交互图。
它通过描述对象之间发送消息的时间顺序显示多个对象之间的动态协作。
它可以表示用例的行为顺序,当执行一个用例行为时,其中的每条消息对应一个类操作或状态机中引起转换的触发事件。
构成元素
构成元素 | 说明 | 表示符号 |
---|---|---|
参与者 (Actor) | 表示与你自己的程序或者系统进行正在交互的动作。用一个小人表示 | |
对象 (Object) | 代表某个事物 | |
控制焦点 (Activation) | 控制焦点是顺序图中表示时间段的符号,在这个时间段内对象将执行相应的操作。用小矩形表示 | |
消息 (Message) | 消息一般分为同步消息(Synchronous Message),异步消息(Asynchronous Message)和返回消息(Return Message) |
时序图例子
需求:这里为了简单就用一个登陆的时序图为参考
通讯图 (Communication Diagram)
概念
顺序图强调先后顺序,通信图则是强调相互之间的关系。顺序图和通信图基本同构,但是很少使用通信图,因为顺序图更简洁,更直观。
构成元素
构成元素 | 说明 | 表示符号 |
---|---|---|
参与者 (Actor) | 表示与你自己的程序或者系统进行正在交互的动作。用一个小人表示 | |
对象 (Object) | 代表某个事物 | |
实例链接 (Instance Link) | 链是类之间关系的实例 | |
消息 (Message) | 消息一般分为同步消息(Synchronous Message),异步消息(Asynchronous Message)和返回消息(Return Message) |
通讯图例子
活动图 (Activity Diagram)
概念
活动图是 UML 用于对系统的动态行为建模的另一种常用工具,它描述活动的顺序,展现从一个活动到另一个活动的控制流。活动图在本质上是一种流程图。活动图着重表现从一个活动到另一个活动的控制流,是内部处理驱动的流程。
构成元素
活动图例子
需求: 点开直播 -> 观看直播的动作
状态图 (Statechart Diagram)
概念
描述了某个对象的状态和感兴趣的事件以及对象响应该事件的行为。转换 (transition) 用标记有事件的箭头表示。状态(state)用圆角矩形表示。通常的做法会包含一个初始状态,当实例创建时,自动从初始状态转换到另外一个状态。
状态图显示了对象的生命周期:即对象经历的事件、对象的转换和对象在这些事件之间的状态。当然,状态图不必要描述所有的事件。
构成元素
构成元素 | 说明 | 表示符号 |
---|---|---|
开始 (final) | 表示成实心黑色圆点 | |
结束 (Flow Final) | 分为活动终止节点(activity final nodes)和流程终止节点(flow final nodes)。而流程终止节点表示是子流程的结束。 | |
状态 (state) | 某一时刻变化的记录 | |
过渡 (Transition) | 相当于 A 点走向 B 点的过渡 | |
同步 (synchronization) | 共同执行一个指令 |
状态图例子
需求: 这里直接借鉴 Activity 官方状态图
交错纵横图 (Interaction overview Diagram)
概念
用来表示多张图之间的关联
构成元素
构成元素 | 说明 | 表示符号 |
---|---|---|
开始 (final) | 表示成实心黑色圆点 | |
结束 (Flow Final) | 分为活动终止节点(activity final nodes)和流程终止节点(flow final nodes)。而流程终止节点表示是子流程的结束。 | |
同步 (synchronization) | 共同执行一个指令 | |
判断 (Decision) | 对某个事件进行判断 | |
流 (Flow) | 事件流的走向 | 可以参考,开始跟结束 |
交错纵横图例子
交互图
组件图 (Component Diagram)
概念
组件图(component diagram)是用来反映代码的物理结构。从组件图中,您可以了解各软件组件(如源代码文件或动态链接库)之间的编译器和运行时依赖关系。使用组件图可以将系统划分为内聚组件并显示代码自身的结构
构成元素
构成元素 | 说明 | 表示符号 |
---|---|---|
组件 (Component) | 组件用一个左侧带有突出两个小矩形的矩形来表示 | |
接口 (Interface) | 接口由一组操作组成,它指定了一个契约,这个契约必须由实现和使用这个接口的构件的所遵循 |
组件图例子
部署图 (Deployment Diagram)
概念
部署图可以用于描述规范级别的架构,也可以描述实例级别的架构。这与类图和对象图有点类似,做系统集成很方便。
构成元素
构成元素 | 说明 | 表示符号 |
---|---|---|
节点 (node) | 结点是存在与运行时的代表计算机资源的物理元素,可以是硬件也可以是运行其上的软件系统 | |
节点实例 (Node Instance) | 与结点的区别在于名称有下划线 | |
物件(Artifact) | 物件是软件开发过程中的产物,包括过程模型(比如用例图、设计图等等)、源代码、可执行程序、设计文档、测试报告、需求原型、用户手册等等。 |
部署图例子
经典例子
微信支付时序图
总结
只要掌握常用的几种图 (用例图、类图、时序图、活动图) ,就已经迈向架构第一步了,加油!
作者:DevYK
链接:https://juejin.cn/post/6844903891067207693
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。