📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗
🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数,欢迎多多交流。👍
前一篇文章《经验分享 · 软考系统分析师》介绍了博主的软考历程和经验分享,这边顺道把系分和架构里面相当重要的UML统一建模语言的总结分享一下,它是面向对象设计的核心工具。
UML 统一建模语言(记忆)
定义:可视化的建模语言,而非程序设计语言。(考点)
组成:构造块、规则、公共机制,其中构造块有事物、关系、图三种。(考点)
补充:UML的结构包括构造块、规则和公共机制三个部分。在基本构造块中,图能够表示多个相互关联的事物的集合;规则是构造块如何放在一起的规定,包括了命名、范围、可见性、完整性和执行。公共机制中,规格说明是关于事物语义的细节描述。(了解即可)
Tips:下图不用怎么了解,主要考察UML的关系和图。
Tips:事物就是UML各种图里面的单个单个的组成原件,比如类图里面的某个类。
UML 有多少种图(了解)
UML2.0,共14种图,教材介绍了13种,去掉了制品图(描述系统的物理结构),如下图。
其中,静态图8个,动态图6个,4个交互图。
Tips:不用在意数量和类型,不会考察这么肤浅的内容,重点掌握几个重要图的特征。
Tips:特别注意,用例图、类图、活动图、状态图、顺序图几个最为重要,都在下方。
UML 统一建模语言的关系**(重要,4类6种)**
注意:一般类图才用这些关系,用例图有自己的三个关系,泛化、扩展、包含,不能混淆。
注意,几个箭头指向要掌握,特别是泛化、聚合、组合,其他不太好考。
**理解:**一个事物的语义依赖于另一个事物的语义的变化而变化,实心三角形,考的也比较少,如人依赖水。
**理解:**基本有联系都是关联,不会考这个,关联里面有两个特殊的会考,组合和聚合,两者都是部分和整体的关系。
**理解:**雁群和大雁的关系,部分和整体没有共同生命周期,空心菱形,记住空心、聚合、无共同生命。
**理解:**人和头部的关系,部分和整体具有共同的生命周期,整体不存在则部分也不存在,实心菱形,记住实心、组合、有共同生命。
**理解:**组合和聚合要区分开,聚合就理解为大雁聚在一起,变成雁群,组合就是人的头部组成了人。
**理解:**一般和特殊的关系,例如学生和大学生,子类和父类的关系,空心三角形+实线。
**理解:**考的比较少,语言不好描述,不要和泛化弄混了,空心三角形+虚线。
类图是用来描述系统中各个类的静态结构,强调类的属性、方法以及类之间的关系。
静态图,系统的静态设计视图,展现一组类、接口、协作和他们之间的关系。
每个类由类、属性、方法三要素组成。
Tips:类图就是反馈类和类之间的关系,可以看到大量的泛化,1对多等等。
Tips:下图聚合的图标错了,是空心菱形。
静态图,展现某一时刻一组对象以及他们之间的关系,为类图的一组快照,考的较少。
对象图描述系统中对象的静态结构、属性和操作、以及对象之间的关系。
Tips:如果没类图的话,对象图就是系统的静态设计视图,可以看到类名前面有一个对象名。
Tips:不太重要,一般根据类图建模,很少根据对象图建模。
如下图,很明显,每块上会显示具体的对象,日常开发都在接触对象和类,很好理解。
用例图是用来描述系统功能和用户之间交互关系的图,强调系统的功能需求。
【用例图基础】
【概念】用例图是指由参与者、用例,边界以及它们之间的关系构成的用于描述系统功能的视图。
【目的】用来描述整个系统的功能。
用例图中包含以下三种关系:
- 包含关系使用符号《include》,想要查看订单列表,前提是需要先登录。
- 扩展关系使用符号《extend》,基于查询订单列表的功能,可以增加一个导出数据的功能。
- 泛化关系,子用例继承父用例所有结构、行为和关系。
【用例图补充】
静态图,能完美展现需求,展现了一组用例、参与者以及他们之间的关系。
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:用例图上较少呈现,不好举例。
动态图,描述了以时间顺序组织的对象之间的交互。
特征是有对象,对象下面是对象生命线/时间线,有时间顺序关系,生命线上有消息交互。
UML中,序列图的基本元素包括对象、生命线和消息。
三类消息:
1、同步:阻塞调用,调用者中止执行,等待返回消息,实心三角箭头表示;
2、异步:发初消息后,调用者继续执行,不等待返回消息,空心三角箭头表示;
3、返回:由右到左的虚线箭头表示;
Tips:考察的点,也是认图的特征,三种消息,日常开发也用到这三种交互。
【序列图补充】
【概念】序列图根据时间序列展示对象如何进行协作。它展示了在用例的特定场景中,对象如何与其他对象交互。
【目的】通过描述对象之间发送消息的时间顺序显示多个对象之间的动态协作。
图中展示的是支付宝条码支付场景的序列图。其中,loop是循环,alt是选择,序列图的其他关系这里就不介绍了。
动态图,强调参加交互的对象的组织。
注意,也是传递消息,但消息是按序号不是按时间,这是和序列图的区别。
Tips:下图2的方法还拆分为2.1和2.2,应该还是有先后关系。
状态图,用来描述对象状态和事件之间的关系,强调一个实体基于事件反应的动态行为。
动态图,展现了一个状态机,描述单个对象在多个用例中的行为,包括简单状态和组合状态。
转换可以通过事件触发器触发,事件触发后相应的监护条件会进行检查。
转换和状态是两个独立的概念,如下图,方框代表状态,箭头上的代表触发事件,实心圆点为起点和终点。
Tips:动态图、静态图不用特别去记,会变化的、有交互的,就是动态的。
Tips:事件触发器和监护条件,都满足才会转换,图上没标记就是没条件。
【状态图补充】
【概念】状态机图对一个单独对象的行为建模,指明对象在它的整个生命周期里,响应不同事件时,执行相关事件的顺序。
【目的】用来表示指定对象,在整个生命周期,响应不同事件的不同状态。
图中描述了,门在其生命周期内所经历的状态。
【活动图】
【概念】描述了具体业务用例的实现流程,展现了系统内一个活动到另一个活动流程。
【目的】用来表示用例实现的工作流程。
图中简单描述了,从开始到登录到查看订单列表,或者登录失败直接结束。
【活动图补充】
下图就是接收订单到结束订单的一个活动图,从一个活动到另外一个活动。
很多元素和状态图很像,所以说活动图是一种特殊的状态图。
并发分岔、并发汇合、监护表达式这几个常考。
静态图,为系统的静态实现视图,展现了一组构件之间的组织和依赖关系。
构件可以理解为可以复用的功能模块,由一组类组成,。
关注一下供接口和需接口,前者是提供给外部的,后者是需要外部的。
Tips:图很典型,供接口是一个半个开口的。
静态图,为系统的静态部署视图,与软件没啥关系,展示物理模块的节点分布。
一个节点包含多个构件,依赖关系类似于包依赖。
Tips:看到硬件,比如数据库等就是部署图,不太重要。
【时序图】
【概念】时序图被用来显示随时间变化,一个或多个元素的值或状态的更改。也显示时控事件之间的交互和管理它们的时间和期限约束。
【目的】用来表示元素状态或者值随时间的变化而变化的视图。
图中展示了老年痴呆病人随着时间的变化病情的变化。
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)。交互概览图是活动图和顺序图的混合物。
💗 本篇文章介绍了统一建模语言UML的技术分享,希望可以帮助到大家。
💗 后续会逐步分享企业实际开发中的实战经验,有需要交流的可以联系博主。