距离上一个 “性能优化系列” 已经快一个月没有发布文章了,最近公司真的是太忙了,甚是想念掘友们啊。最近把学习架构方面的知识记录下来,供自己和掘友们一起学习。

注意: 文章中 UML 图开始用是 Windows PowerDesigner 工具,后来换电脑了用的 StarUML。

UML

定义

UML 是统一建模语言, 是一种开放的方法,用于说明、可视化、构建和编写一个正在开发的、面向对象的、软件密集系统的制品的开放方法。

作用

  1. 帮组开发团队以一种可视化的方式理解系统的功能需求。

  1. 有利于开发团队队员之间在各个开发环节间确立沟通的标准,便于系统文档的制定和项目的管理。因为 UML 的简单、直观和标准性,在一个团队中用 UML 来交流比用文字说明的文档要好的多。

  1. UML 为非专业编程人士理解软件的功能和构造,提供了一种直白、简单、通俗的方法。

  1. 使用 UML 可以方便的理解各种框架的设计方式。

面向对象模型

用例图 (User Case Diagram)

概述

  • 用例图主要模拟系统中的动态行为,并且描述了用户、需求、以及系统功能单元之间的关系。

  • 用例图由参与者 (用户) ,用例 (功能) 和它们之间的关系组成。

目的

  1. 用来收集系统的要求。

  1. 用于获取系统的外观图。

  1. 识别外部和内部影响因素。

  1. 显示要求之间的相互作用是参与者。

构成元素

组成元素

说明

符号表示

参与者 (Actor)

表示与你自己的程序或者系统进行正在交互的动作。用一个小人表示

用例 (User Case)

表示在一个系统或者程序中某个功能的描述。用一个椭圆代表

关联关系 (Association)

表示参与者与用例之间的关系。用一个箭头表示

包含关系 (Include)

表示一个大的功能分解成多个小模块的动作。用一个带包含文字的虚线箭头表示

扩展关系 (Extend)

表示用例功能的延伸,相当于是为用例提供附加功能。用一个带扩展文字的虚线箭头表示

依赖 (dependency)

表示一个用例依赖于另一个用例(相当于程序里面的一个类引用另一个类的关系)。用一个带依赖文字的虚线箭头表示

泛化 (Generalization)

相当于程序里面的继承关系。用一个箭头表示

用例图例子

需求: 以一个登录的例子来画一个用例图

  1. 包含 登录/注册/

  1. 登录/注册 支持手机号码、第三方 QQ/weichat/GitHub 登录注册

效果图:

提供的登录用例基本上已经包含了刚刚所学的组成元素部分。

结构图

类图 (Class Diagram)

概念

类图 (Class Diagram) 是显示了模型的静态结构,特别是模型中存在的类、类的内部结构以及它们与其它类的关系等。

类图不显示暂时性的信息,类图是面向对象建模的主要组成部分。它即用于应用程序的系统分类的一般概念建模,也用于详细建模,将模型转换成编程代码。

构成元素

构成元素

说明

表示符号

泛化 (Generalization)

是一种继承关系, 表示一般与特殊的关系, 它指定了子类如何特化父类的所有特征和行为。用一个带三角箭头的实线,箭头指向父类表示

实现 (Realization)

是一种类与接口的关系, 表示类是接口所有特征和行为的实现。用一个带三角箭头的虚线,箭头指向接口表示.

关联 (Association)

1. 是一种拥有的关系, 它使一个类知道另一个类的属性和方法. 2.关联可以是双向的,也可以是单向的。双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。用一个带普通箭头的实心线,指向被拥有者

依赖 (Dependency)

是一种使用的关系, 即一个类的实现需要另一个类的协助, 所以要尽量不使用双向的互相依赖.用一个带箭头的虚线,指向被使用者

聚合 (Aggregation)

聚合是一种特殊的关联 (Association) 形式,表示两个对象之间的所属 (has-a) 关系。所有者对象称为聚合对象,它的类称为聚合类;从属对象称为被聚合对象,它的类称为被聚合类。例如,一个公司有很多员工就是公司类 Company 和员工类Employee 之间的一种聚合关系。被聚合对象和聚合对象有着各自的生命周期,即如果公司倒闭并不影响员工的存在。用一个带空心菱形的实心线,菱形指向整体

组合 (Composition)

是整体与部分的关系, 但部分不能离开整体而单独存在. 如公司和部门是整体和部分的关系, 没有公司就不存在部门。用一个带实心菱形的实线,菱形指向整体表示。

类图例子

需求: 基于 google 官方 MVP 架构 绘制一个基本的 MVP 类图架构

组合结构图 (Composite Structure Diagram)

概念

用来显示组合结构或部分系统的内部构造,包括类、接口、包、组件、端口和连接器等元素。比类图更抽象的表示,一般来说先画组合结构图,再画类图。

构成元素

构成元素

说明

表示符号

类 (Class)

表示对某件事物的描述

接口 (Interface)

表示用于对 Class 的说明

端口 (port)

表示部件和外部环境的交互点

部件 (part)

表示被描述事物所拥有的内部成分

泛化 (Generalication)

是一种继承关系, 表示一般与特殊的关系, 它指定了子类如何特化父类的所有特征和行为。用一个带三角箭头的实线,箭头指向父类表示

实现 (Realization)

是一种类与接口的关系, 表示类是接口所有特征和行为的实现。用一个带三角箭头的虚线,箭头指向接口表示.

关联 (Association)

1. 是一种拥有的关系, 它使一个类知道另一个类的属性和方法. 2.关联可以是双向的,也可以是单向的。双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。用一个带普通箭头的实心线,指向被拥有者

依赖 (Dependency)

是一种使用的关系, 即一个类的实现需要另一个类的协助, 所以要尽量不使用双向的互相依赖.用一个带箭头的虚线,指向被使用者

聚合 (Aggregation)

聚合是一种特殊的关联 (Association) 形式,表示两个对象之间的所属 (has-a) 关系。所有者对象称为聚合对象,它的类称为聚合类;从属对象称为被聚合对象,它的类称为被聚合类。例如,一个公司有很多员工就是公司类 Company 和员工类Employee 之间的一种聚合关系。被聚合对象和聚合对象有着各自的生命周期,即如果公司倒闭并不影响员工的存在。用一个带空心菱形的实心线,菱形指向整体

组合 (Composition)

是整体与部分的关系, 但部分不能离开整体而单独存在. 如公司和部门是整体和部分的关系, 没有公司就不存在部门。用一个带实心菱形的实线,菱形指向整体表示。

注意事项

侧重类的整体特性,就用类图;侧重类的内部结构,就使用组合结构图。

组合结构图例子

对象图 (Object Diagram)

概念

显示某时刻对象和对象之间的关系

构成元素

构成元素

说明

表示符号

对象 (Object)

代表某个事物

实例链接 (Instance Link)

链是类之间关系的实例

依赖 (Dependency)

想当于 A 对象使用 B 对象里面的属性

对象图例子

包图 (Package Diagram)

概念

包与包的之间的关系

构成元素

构成元素

说明

表示符号

包 (Package)

当对一个比较复杂的软件系统进行建模时,会有大量的类、接口、组件、节点和图需要处理;如果放在同一个地方的话,信息量非常的大,显得很乱,不方便查询,所以就对这些信息进行分组,将语义或者功能相同的放在同一个包中,这样就便于理解和处理整个模型

泛化 (Generalization)

是一种继承关系, 表示一般与特殊的关系, 它指定了子类如何特化父类的所有特征和行为。用一个带三角箭头的实线,箭头指向父类表示

依赖 (Dependency)

是一种使用的关系, 即一个类的实现需要另一个类的协助, 所以要尽量不使用双向的互相依赖.用一个带箭头的虚线,指向被使用者

包图例子

动态图

时序图 (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 用于对系统的动态行为建模的另一种常用工具,它描述活动的顺序,展现从一个活动到另一个活动的控制流。活动图在本质上是一种流程图。活动图着重表现从一个活动到另一个活动的控制流,是内部处理驱动的流程。

构成元素

构成元素

说明

表示符号

活动 (Activity)

活动状态用于表达状态机中的非原子的运行

对象节点 (Object Node)

某件事物的具体代表

判断 (Decision)

对某个事件进行判断

同步 (synchronization)

指发送一个请求,需要等待返回,然后才能够发送下一个请求,有个等待过程;

开始 (final)

表示成实心黑色圆点

结束 (Flow Final)

分为活动终止节点(activity final nodes)和流程终止节点(flow final nodes)。而流程终止节点表示是子流程的结束。

活动图例子

需求: 点开直播 -> 观看直播的动作

状态图 (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)

物件是软件开发过程中的产物,包括过程模型(比如用例图、设计图等等)、源代码、可执行程序、设计文档、测试报告、需求原型、用户手册等等。

部署图例子

经典例子

微信支付时序图

总结

只要掌握常用的几种图 (用例图、类图、时序图、活动图) ,就已经迈向架构第一步了,加油!

系列文章

移动架构 (一) 详解架构设计中UML图的使用

移动架构 (二) Android 中 Handler 架构分析,并实现自己简易版本 Handler 框架

移动架构 (三) AMS 源码分析

移动架构 (四) EventBus源码分析及实现自己的轻量级 EventBus 框架

移动架构 (五) 了解Android数据持久化

移动架构 (六) 轻量级进程间通信框架设计

移动架构 (七) 组件化架构设计思想

移动架构 (八) 动态化加载插件技术模型实现

移动架构 (一) 详解架构设计中UML图的使用相关推荐

  1. 详解硬件设计中电容电感磁珠

                       首先让我们来介绍一下电容,常见电容器有: 铝电解电容器:极性,容量大,能耐受大的脉动电流,但容量误差大,泄漏电流大,适合于低频旁路.信号耦合和电源滤波等场合. 胆 ...

  2. 详解网页设计中的定位与定位应用

    定位一直是WEB标准应用中的难点,如果理不清楚定位那么可能应实现的 效果 实现不了,实现了的效果可能会走样.如果理清了定位的原理,那定位会让网页实现的更加完美. 定位的定义: 在CSS中关于定位的内容 ...

  3. Rest架构风格详解

    Rest架构风格详解 何为架构风格? 设计模式 架构模式 架构风格 Rest架构风格 客户端-服务器(Client-Server, CS) 无状态(Stateless) 缓存(Cache) 统一接口 ...

  4. WCF服务端运行时架构体系详解[下篇]

    作为WCF中一个核心概念,终结点在不同的语境中实际上指代不同的对象.站在服务描述的角度,我们所说的终结点实际上是指ServiceEndpoint对象.如果站在WCF服务端运行时框架来说,终结点实际上指 ...

  5. x86 - CPU架构/寄存器详解 (三) 保护模式

    系列文章 x86 - CPU架构/寄存器详解 (一)x86.8086.i386.IA-32 是什么? x86 - CPU架构/寄存器详解 (二) 实模式(8086模式) x86 - CPU架构/寄存器 ...

  6. C# 三层架构搭建详解(BLL DAL Model)

    C# 三层架构搭建详解(BLL DAL Model) 1.建立好方案 在方案上右键 用上面的方法添加三个类库:DAL(数据访问层) BLL(业务逻辑层) Model(模型层) 注意要按顺序添加引用 D ...

  7. 【NLP】四万字全面详解 | 深度学习中的注意力机制(四,完结篇)

    作者 | 蘑菇先生 知乎 | 蘑菇先生学习记 深度学习Attention小综述系列: 四万字全面详解 | 深度学习中的注意力机制(一) 四万字全面详解 | 深度学习中的注意力机制(二) 四万字全面详解 ...

  8. 【NLP】四万字全面详解 | 深度学习中的注意力机制(二)

    NewBeeNLP原创出品 公众号专栏作者@蘑菇先生 知乎 | 蘑菇先生学习记  前情提要:四万字全面详解 | 深度学习中的注意力机制(一) 目前深度学习中热点之一就是注意力机制(Attention ...

  9. php执行md5sum,Linux_详解Linux系统中md5sum命令的用法,MD5算法常常被用来验证网络文 - phpStudy...

    详解Linux系统中md5sum命令的用法 MD5算法常常被用来验证网络文件传输的完整性,防止文件被人篡改.MD5全称是报文摘要算法(Message-Digest Algorithm 5),此算法对任 ...

最新文章

  1. 赖江山:生态学研究都在用哪些R包?
  2. 报名 | 顾险峰教授讲座:对抗生成网络的几何理论解释
  3. 撤销 git commit
  4. OpenStack创建网络和虚拟机、dhcp设备、虚拟路由器、虚拟机访问外网原理分析
  5. JSR349(Bean Validation 1.1)
  6. Python面向对象编程(二)
  7. 计算机学校专业工学,大学专业详解:工学(仪器仪表类)
  8. [PAT乙级]1017 A除以B
  9. 邓迎春绘画201702作品10
  10. jquery 选择器之children与find
  11. 【连载】如何掌握openGauss数据库核心技术?秘诀一:拿捏SQL引擎(4)
  12. VUE 学习代码理解(1~5课时代码)
  13. 机器视觉软件工程师的生活是怎样的?
  14. 《大型网站技术架构》笔记
  15. 【嵌入式】---- 单片机常用单位
  16. 永中office属于职称计算机吗,永中office
  17. windows10系统超全优化方法
  18. 关于登录时验证码无法显示
  19. 如何添加、修改和删除矢量线段
  20. 【第十二篇】Flowable事件-定时器事件

热门文章

  1. 【2018亚太数据中心峰会】辜茂军:绿色智能数据机房技术- 精确送风
  2. ScheduledExecutorService的简单使用、scheduleAtFixedRate和scheduleWithFixedDelay区别
  3. SGP30传感器示例程序(基于51单片机、IO模拟I2C)
  4. 1.2 lamp/lnmp 环境搭建
  5. ubuntu18.04安装redis教程
  6. html中marquee改变颜色,html中marquee标签的用法
  7. 查看mysql的所有用户和权限
  8. 【剧前爆米花--爪哇岛寻宝】常见的锁策略——乐观锁、读写锁、重量级锁、自旋锁、公平锁、可重入锁等
  9. 90后80后70后60后50后的无奈
  10. FilterChain 接口