《知识拓展 · 统一建模语言UML》

📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗

🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数,欢迎多多交流。👍

文章目录

写在前面的话

前一篇文章《经验分享 · 软考系统分析师》介绍了博主的软考历程和经验分享,这边顺道把系分和架构里面相当重要的UML统一建模语言的总结分享一下,它是面向对象设计的核心工具。

UML 简介

UML 统一建模语言(记忆)

定义:++可视化的建模语言,而非程序设计语言++ 。(考点)

组成:++构造块、规则、公共机制++ ,其中构造块有++事物、关系、图++ 三种。(考点)

补充:UML的结构包括构造块、规则和公共机制三个部分。在基本构造块中,++图++ 能够表示多个相互关联的事物的集合;规则是构造块如何放在一起的规定,包括了++命名、范围、可见性、完整性和执行++ 。公共机制中,++规格说明++是关于事物语义的细节描述。(了解即可)

Tips:下图不用怎么了解,主要考察UML的关系和图。

Tips:事物就是UML各种图里面的单个单个的组成原件,比如类图里面的某个类。

UML 有多少种图(了解)

UML2.0,共14种图,教材介绍了13种,去掉了制品图(描述系统的物理结构),如下图。

其中,静态图8个,动态图6个,4个交互图。

Tips:不用在意数量和类型,不会考察这么肤浅的内容,重点掌握几个重要图的特征。

Tips:**特别注意,**用例图、类图、活动图、状态图、顺序图几个最为重要,都在下方。


UML 关系

UML 统一建模语言的关系**(重要,4类6种)**

注意:一般类图才用这些关系,用例图有自己的三个关系,泛化、扩展、包含,不能混淆。

注意,几个箭头指向要掌握,特别是泛化、聚合、组合,其他不太好考。

**理解:**一个事物的语义依赖于另一个事物的语义的变化而变化,实心三角形,考的也比较少,如人依赖水。

**理解:**基本有联系都是关联,不会考这个,关联里面有两个特殊的会考,组合和聚合,两者都是部分和整体的关系。

**理解:**雁群和大雁的关系,部分和整体没有共同生命周期,空心菱形,记住空心、聚合、无共同生命。

**理解:**人和头部的关系,部分和整体具有共同的生命周期,整体不存在则部分也不存在,实心菱形,记住实心、组合、有共同生命。

**理解:**组合和聚合要区分开,聚合就理解为大雁聚在一起,变成雁群,组合就是人的头部组成了人。

**理解:**一般和特殊的关系,例如学生和大学生,子类和父类的关系,空心三角形+实线。

**理解:**考的比较少,语言不好描述,不要和泛化弄混了,空心三角形+虚线。


1、类图(重要)

类图是用来描述系统中各个类的静态结构,强调类的属性、方法以及类之间的关系。

静态图,系统的静态设计视图,展现一组类、接口、协作和他们之间的关系。

每个类由类、属性、方法三要素组成。

Tips:类图就是反馈类和类之间的关系,可以看到大量的泛化,1对多等等。

Tips:下图聚合的图标错了,是空心菱形。

2、对象图(了解)

静态图,展现某一时刻一组对象以及他们之间的关系,++为类图的一组快照++,考的较少。

对象图描述系统中对象的静态结构、属性和操作、以及对象之间的关系。

Tips:如果没类图的话,对象图就是系统的静态设计视图,可以看到类名前面有一个对象名。

Tips:不太重要,一般根据类图建模,很少根据对象图建模。

如下图,很明显,每块上会显示具体的对象,日常开发都在接触对象和类,很好理解。

3、用例图(重要)

用例图是用来描述系统功能和用户之间交互关系的图,强调系统的功能需求。

【用例图基础】

【概念】用例图是指由参与者、用例,边界以及它们之间的关系构成的用于描述系统功能的视图。

【目的】用来描述整个系统的功能。

用例图中包含以下三种关系:

  1. 包含关系使用符号《include》,想要查看订单列表,前提是需要先登录。
  2. 扩展关系使用符号《extend》,基于查询订单列表的功能,可以增加一个导出数据的功能。
  3. 泛化关系,子用例继承父用例所有结构、行为和关系。

【用例图补充】

静态图,能完美展现需求,展现了一组++用例、参与者++以及他们之间的关系。

1、参与者可以是人、硬件或其他系统可以扮演的角色;

Tips:参与者是指在于系统外部并与系统进行交互的任何事物,既可以是使用系统的用户,也可以是其他外部系统和设备等外部实体。SO,应该是外部实体才对。

Tips:真题也有考察,参与者是系统外部和系统进行交互的人或物,不包括内部实体。

2、用例是参与者完成的一系列操作,或理解为功能;

Tips:用例执行有先后顺序,是一种在时间上的依赖关系。

3、用例之间的关系有:++扩展、包含、泛化++,这是用例图特有的。

Tips:和前面类图的六个关系区分开,没什么关联。

4、A包含B(include),意思是执行A之前++必须先做++B,B是A的一部分,可以理解为A是主方法,B是子方法;

Tips:更恰当的比喻应该是,做查询动作A如果必须要验证用户权限B,那么A包含B,此时A指向B。

5、A扩展B(extend),意思是B是A的扩展,A完成后,++可做可不做++B,额外的不是必须的,例如代码在结尾处异步发通知之类的;

Tips:更恰当的比喻应该是,当A满足某条件的时候,触发B,则B是A的扩展,比如付钱的时候余额不足,需要去银行取钱,则取钱是付钱的扩展,B指向A,箭头指向也可以按这个规律记,指向先执行的逻辑。

6、泛化就是父子继承关系,空心三角形。

Tips:用例图上较少呈现,不好举例。

4、序列图/顺序图(重要)

动态图,++描述了以时间顺序组织的对象之间的交互++。

特征是有对象,对象下面是对象生命线/时间线,有时间顺序关系,生命线上有消息交互。

UML中,序列图的基本元素包括对象、生命线和消息。

三类消息:

1、++同步++:阻塞调用,调用者中止执行,等待返回消息,实心三角箭头表示;

2、++异步++:发初消息后,调用者继续执行,不等待返回消息,空心三角箭头表示;

3、++返回++:由右到左的虚线箭头表示;

Tips:考察的点,也是认图的特征,三种消息,日常开发也用到这三种交互。

【序列图补充】

【概念】序列图根据时间序列展示对象如何进行协作。它展示了在用例的特定场景中,对象如何与其他对象交互。

【目的】通过描述对象之间发送消息的时间顺序显示多个对象之间的动态协作。

图中展示的是支付宝条码支付场景的序列图。其中,loop是循环,alt是选择,序列图的其他关系这里就不介绍了。

5、通信图/协作图(重要)

动态图,++强调参加交互的对象的组织++。

注意,也是传递消息,但消息是按序号不是按时间,这是和序列图的区别。

Tips:下图2的方法还拆分为2.1和2.2,应该还是有先后关系。

6、状态图(重要)

状态图,用来描述对象状态和事件之间的关系,强调一个实体基于事件反应的动态行为。

动态图,展现了一个状态机,描述单个对象在多个用例中的行为,包括简单状态和组合状态。

转换可以通过事件触发器触发,事件触发后相应的监护条件会进行检查。

转换和状态是两个独立的概念,如下图,方框代表状态,箭头上的代表触发事件,实心圆点为起点和终点。

Tips:动态图、静态图不用特别去记,会变化的、有交互的,就是动态的。

Tips:事件触发器和监护条件,都满足才会转换,图上没标记就是没条件。

【状态图补充】

【概念】状态机图对一个单独对象的行为建模,指明对象在它的整个生命周期里,响应不同事件时,执行相关事件的顺序。

【目的】用来表示指定对象,在整个生命周期,响应不同事件的不同状态。

图中描述了,门在其生命周期内所经历的状态。

7、活动图(重要)

【活动图】

【概念】描述了具体业务用例的实现流程,展现了系统内一个活动到另一个活动流程。

【目的】用来表示用例实现的工作流程。

图中简单描述了,从开始到登录到查看订单列表,或者登录失败直接结束。

【活动图补充】

下图就是接收订单到结束订单的一个活动图,从一个活动到另外一个活动。

很多元素和状态图很像,所以说活动图是一种特殊的状态图。

并发分岔、并发汇合、监护表达式这几个常考。

8、构件图/组件图(一般)

静态图,为系统的静态实现视图,展现了一组构件之间的组织和依赖关系。

构件可以理解为可以复用的功能模块,由一组类组成,。

关注一下供接口和需接口,前者是提供给外部的,后者是需要外部的。

Tips:图很典型,供接口是一个半个开口的。

9、部署图(一般)

静态图,为系统的静态部署视图,与软件没啥关系,展示物理模块的节点分布。

一个节点包含多个构件,依赖关系类似于包依赖。

Tips:看到硬件,比如数据库等就是部署图,不太重要。

10、时序图(一般)

【时序图】

【概念】时序图被用来显示随时间变化,一个或多个元素的值或状态的更改。也显示时控事件之间的交互和管理它们的时间和期限约束。

【目的】用来表示元素状态或者值随时间的变化而变化的视图。

图中展示了老年痴呆病人随着时间的变化病情的变化。

所有图知识补充

**注意!**下面这张图的关键词再混个眼熟,不然选择题考到还是区分不了。

14种图的介绍(补充,混个眼熟)

(1)类图(class diagram)。类图描述一组类、接口、协作和它们之间的关系。在OO系统的建模中,最常见的图就是类图。类图给出了系统的静态设计视图,活动类的类图给出了系统的静态进程视图。

(2)对象图(object diagram)。对象图描述一组对象及它们之间的关系。对象图描述了在类图中所建立的事物实例的静态快照。和类图一样,这些图给出系统的静态设计视图或静态进程视图,但它们是从真实案例或原型案例的角度建立的。

(3)构件图(component diagram)。构件图描述一个封装的类和它的接口、端口,以及由内嵌的构件和连接件构成的内部结构。构件图用于表示系统的静态设计实现视图。对于由小的部件构建大的系统来说,构件图是很重要的。构件图是类图的变体。

(4)组合结构图(composite structure diagram)。组合结构图描述结构化类(例如,构件或类)的内部结构,包括结构化类与系统其余部分的交互点。组合结构图用于画出结构化类的内部内容。

(5)用例图(use case diagram)。用例图描述一组用例、参与者及它们之间的关系。用例图给出系统的静态用例视图。这些图在对系统的行为进行组织和建模时是非常重要的。

(6)顺序图(sequence diagram,序列图)。顺序图是一种交互图(interaction diagram),交互图展现了一种交互,它由一组对象或参与者以及它们之间可能发送的消息构成。交互图专注于系统的动态视图。顺序图是强调消息的时间次序的交互图。

(7)通信图(communication diagram)。通信图也是一种交互图,它强调收发消息的对象或参与者的结构组织。顺序图和通信图表达了类似的基本概念,但它们所强调的概念不同,顺序图强调的是时序,通信图强调的是对象之间的组织结构(关系)。在UML 1.X版本中,通信图称为++协作图++(collaboration diagram)。

(8)定时图(timing diagram,计时图)。定时图也是一种交互图,它强调消息跨越不同对象或参与者的实际时间,而不仅仅只是关心消息的相对顺序。

(9)状态图(state diagram)。状态图描述一个状态机,它由状态、转移、事件和活动组成。状态图给出了对象的动态视图。它对于接口、类或协作的行为建模尤为重要,而且它强调事件导致的对象行为,这非常有助于对反应式系统建模。

(10)活动图(activity diagram)。活动图将进程或其他计算结构展示为计算内部一步步的控制流和数据流。活动图专注于系统的动态视图。它对系统的功能建模和业务流程建模特别重要,并强调对象间的控制流程。

(11)部署图(deployment diagram)。部署图描述对运行时的处理节点及在其中生存的构件的配置。部署图给出了架构的静态部署视图,通常一个节点包含一个或多个部署图。

(12)制品图(artifact diagram)。制品图描述计算机中一个系统的物理结构。制品包括文件、数据库和类似的物理比特集合。制品图通常与部署图一起使用。制品也给出了它们实现的类和构件。

(13)包图(package diagram)。包图描述由模型本身分解而成的组织单元,以及它们之间的依赖关系。

(14)交互概览图(interaction overview diagram)。交互概览图是活动图和顺序图的混合物。

latex 复制代码
1. 数据流图 (DFD) - 面向对象分析
描述:通过图形化的方式展示数据在系统中的流动和处理过程,强调数据的输入、输出和存储。
特征:用于表示系统中的数据流动。
包括:过程、数据存储、外部实体和数据流。

描述: 描述数据在系统中如何流动和被处理。
特征:
  层次结构: 可以分解成多个层次,顶层图描述系统整体数据流,下层图逐步细化。
  抽象性: 关注数据流动和处理过程,不涉及具体实现细节。
  图形化: 使用标准符号表示数据源、数据存储、数据处理和数据流向。
组成:
  外部实体: 系统外部与系统交互的人员或系统。
  数据流: 数据的移动,用箭头表示方向。
  处理: 对数据的操作或变换,用圆形或矩形表示。
  数据存储: 数据的静态存储,用平行线表示。

[外部实体] --> (过程1) --> [数据存储]
[数据存储] --> (过程2) --> [外部实体]
示例:一个在线购物系统的数据流图,显示用户输入订单信息,系统处理并存储订单。

2. 实体关系图 (ER图) - 结构化分析
描述:通过图形化的方式展示系统中的数据结构,帮助理解数据之间的联系和约束。
特征:用于描述数据模型,展示实体及其之间的关系。
包括:实体、属性和关系。

描述: 描述系统中数据对象的类型、属性以及它们之间的关系。
特征:
  数据模型: 描述系统中数据的逻辑结构和关系。
  概念清晰: 使用实体、属性和关系清晰地表达数据之间的联系。
  易于理解: 图形化表示易于用户和开发人员理解。
组成:
  实体: 现实世界中的事物或概念,用矩形表示。
  属性: 实体的特征或特性,用椭圆形表示。
  关系: 实体之间的联系,用菱形表示。

[客户] --(下单)--> [订单]
[订单] --(包含)--> [产品]
示例:客户与订单之间的关系,订单包含多个产品。

3. 状态图 (State Diagram)
描述:通过状态和事件的组合,展示对象如何响应不同的事件并在不同状态之间转换。
特征:描述对象在其生命周期中可能处于的状态及状态之间的转换。
包括:状态、事件和转换。

描述:  描述对象对外部事件的响应,以及状态转换的条件和结果。
特征:
  对象视角: 描述对象在其生命周期内可能处于的状态以及状态之间的转换。
  事件驱动: 状态转换由事件触发。
组成:
  状态: 对象生命周期中的一个阶段,用圆角矩形表示。
  转换: 状态之间的变化,用箭头表示。
  事件: 触发状态转换的条件,标记在转换箭头上。

[初始状态] --> (事件1) --> [状态A]
[状态A] --> (事件2) --> [状态B]
[状态B] --> (事件3) --> [结束状态]
示例:一个订单的状态图,初始状态为"待处理",经过"处理"后变为"已发货"。

4. 活动图 (Activity Diagram)
描述:通过图形化的方式展示活动的顺序和并行执行,强调流程的逻辑和控制流。
特征:描述系统中的工作流或业务过程。
包括:活动、决策节点、开始/结束节点和控制流。

描述:  描述系统执行某个用例或操作时的活动流程。
特征:
  流程建模: 描述系统中活动的顺序流程,可以包含并行活动。
  行为描述: 可以描述业务流程、算法逻辑等。
组成:
  活动: 系统执行的任务或操作,用圆角矩形表示。
  转换: 活动之间的流转,用箭头表示。
  分支: 根据条件选择不同的活动路径,用菱形表示。
  并行: 同时执行多个活动,用粗线表示。

[开始] --> (活动1) --> (活动2) --> [结束]
(活动2) --> (决策) --> (活动3) --> [结束]
示例:用户注册流程,活动包括填写信息、验证信息和确认注册。

5. 用例图 (Use Case Diagram)
描述:通过用例和参与者的关系,展示系统提供的功能及其使用场景,帮助识别系统需求。
特征:描述系统的功能需求及其与外部用户(角色)的交互。
包括:用例、参与者和关系。

描述:  描述系统提供的功能以及与用户或其他系统的交互。
特征:
  用户视角: 描述系统功能,以用户角度出发。
  交互描述: 展示用户和系统之间的交互。
组成:
  参与者: 与系统交互的人或系统,用小人表示。
  用例: 系统提供的功能,用椭圆形表示。
  关系: 参与者和用例之间的联系,用线段表示。

[用户] --(使用)--> (注册用例)
[用户] --(使用)--> (登录用例)
示例:用户可以注册和登录系统。

6. 流程图 (Flowchart)
描述:通过图形化的方式展示步骤的顺序和逻辑,适用于简单的流程或算法。
特征:描述过程或算法的步骤和决策。
包括:开始/结束符、过程框、决策框和箭头。

描述:  描述算法、业务流程或其他任何需要按步骤执行的任务。
特征:
  步骤清晰: 使用图形符号清晰地表示算法或流程的每个步骤。 
  逻辑明确: 使用连接线表示步骤之间的执行顺序。
组成:
  开始/结束: 流程的起点和终点,用圆形或椭圆形表示。
  处理步骤: 具体的操作或任务,用矩形表示。
  判断: 根据条件选择不同的执行路径,用菱形表示。
  流程线: 连接各个步骤,指示执行顺序,用箭头表示。

[开始] --> [步骤1] --> [决策] --> (是) --> [步骤2] --> [结束]
                     |
                    (否)
                     |
                   [步骤3] --> [结束]
示例:一个简单的决策流程,判断用户是否满足条件。

7. 顺序图 (Sequence Diagram) 又称时序图 (Timing Diagram)
描述:通过时间轴展示对象之间的消息传递,强调交互的时间顺序。
特征:描述对象之间的交互及其顺序。
包括:对象、消息和时间线。

描述:  描述对象之间为了完成某个目标而进行的交互,重点在于消息的时序。
特征:
  时间顺序: 强调消息传递的时间顺序,描述对象之间如何交互。
  交互建模: 展示对象之间发送和接收消息的序列。
组成:
  对象: 参与交互的对象,用矩形表示。
[用户] -> [系统] : 登录()
[系统] -> [数据库] : 验证用户()
[数据库] -> [系统] : 返回结果
[系统] -> [用户] : 登录成功
示例:用户登录过程中的消息传递。

总结陈词

💗 本篇文章介绍了统一建模语言UML的技术分享,希望可以帮助到大家。

💗 后续会逐步分享企业实际开发中的实战经验,有需要交流的可以联系博主。

相关推荐
思忖小下2 小时前
开发中使用UML的流程总结篇
需求分析·uml
喵~来学编程啦7 小时前
【软件工程】一篇入门UML建模图(状态图、活动图、构件图、部署图)
软件工程·uml
战神刘玉栋10 小时前
《经验分享 · 软考系统分析师》
经验分享·软考
喵~来学编程啦12 小时前
【软件工程】一篇入门UML建模图(用例图、对象图、顺序图与协作图)
软件工程·uml
肖老师+3 天前
可视化建模以及UML期末复习篇----UML图
uml·可视化建模
FreakStudio4 天前
全网最适合入门的面向对象编程教程:60 Python面向对象综合实例-传感器数据实时绘图器
python·嵌入式·面向对象·电子diy
沉河不浮4 天前
PlantUML——类图
uml
huaqianzkh4 天前
UML箭线图的理解和实践
uml
编程老船长5 天前
第2章 系统设计实战指南:角色定义、功能模块与接口分析
后端·uml·设计