通用建模语言(UML)
如果是准备学习设计模式的同学,可以只了解类图相关的知识
而如果是在准备软件设计师考试的同学,或许会对你有点帮助
正在施工......
参考博客:https://blog.****.net/unique_perfect/article/details/104989118
UML 统一建模语言
统一建模语言(UML,Unified Modeling Language)是面向对象软件的标准化建模语言。UML因其简单、统一的特点,而且能表达软件设计中的动态和静态信息,目前已成为可视化建模语言的工业标准。在软件无线电系统的开发过程中,统一建模语言可以在整个设计周期中使用,帮助设计者缩短设计时间,减少改进的成本,使软硬件分割最优。
UML 中的三个基本模块:事务,关系,图。
UML 分类
类就像是工厂中的流水线,而对象就是流水线上制作出的产品。
UML 静态结构图
静态结构图就是基于类用于描述这条流水线的。
图名 |
作用 |
---|---|
类图 |
表示分析设计领域的静态结构 |
对象图 |
表示系统中的多个对象在某一时刻的状态 |
包图 |
对UML的模型元素进行分组整理,还可以表示多个包之间的关系 |
构建图 |
表示构成软件的各个可重复再利用的部件的内部结构以及部件之间的相互关系 |
结合结构图 |
表示具有复杂内部结构的类或者构件的内部结构 |
部署图 |
表示系统执行时的硬件构成以及硬件节点之间的关系 |
UML 动态行为图
动态行为图基于对象用于描述这条流水线上的产品的交互、行为等。
图名 |
作用 |
---|---|
用例图 |
表示从系统外部看到的系统所提供给用户可以使用的功能 |
活动图 |
表示某个业务的具体处理流程 |
状态图 |
表示某个对象在其生命周期内,各个状态之间的迁移变化及引起状体迁移的触发事件之间的关系 |
下面这三种图都属于(交互图)
图名 |
作用 |
---|---|
顺序图 |
按照时间顺序从上到下来表示生命线之间的信息交互,可结合用例图表示某个用例的场景。 |
通信图 |
以参与交互的生命线之间的连接为着眼点表示生命线之间的信息交互。交互概念图:用活动图的形式表示多个交互之间的控制关系。 |
时序图 |
表示多个生命线的状态变化和时间之间的关系。 |
用例图
用例图是9种UML图中比较重要的图之一,它是由软件需求分析到最终实现的第一步,描述人们希望如何使用一个系统,最常用来描述系统以及子系统。
用例图的组成
事务 |
描述 |
图例 |
---|---|---|
参与者(Actor) |
与应用程序或系统进行交互的用户、组织或外部系统。 |
|
用例(UseCase) |
用例就是外部可见的系统功能,对系统提供的服务进行描述。 |
|
子系统(Subsystem) |
用来展示系统的一部分功能,这部分功能联系紧密。 |
用例图所包含的的关系
用例图中涉及的关系有:关联、泛化、包含、扩展。
a. 关联(Association) 表示参与者与用例之间的通信,任何一方都可发送或接受消息。
【箭头指向】:无箭头,将参与者与用例相连接,指向消息接收方
b. 泛化(Inheritance) 就是通常理解的继承关系。在实际应用中很少使用泛化关系,子用例中的特殊行为都可以作为父用例中的备选流存在。
【箭头指向】:指向父用例
c. 包含(Include) 提取公共交互,提高复用
【箭头指向】:指向分解出来的功能用例
d. 扩展(Extend) “冻结”基用例以保持稳定,并且动态扩展基用例功能
【箭头指向】:指向基础用例
例子比如这是一个用户管理的用例图
类图
类图是描述系统中的类,以及各个类之间的关系的静态视图。是面向对象系统建模中最常用和最重要的图,是定义其他图的基础。
类图示例
一个Employee类,它包含private属性age,protected属性name,public属性email,package属性gender,public方法work()。
- +、-、#、~ 表示属性及方法可见性
- public 用 + 表示
- private 用 - 表示
- protected 用 # 表示
- package 用 ~ 表示
接口的UML图示
在UML类图中,常见的有以下几种关系
关系 |
指向 |
例子 |
图示 |
---|---|---|---|
泛化 |
从子类指向父类,或者子接口指向父接口。 |
类和子类的关系。比如学生类可以继承人类。 |
|
实现 |
箭头指向成员变量类。 |
两个类之间的关联,也可以是一个类和自身的关联。比如班级类和学生类,学生类作为成员变量存在于班级类中。 |
|
关联 |
箭头指向成员变量类。 |
两个类之间的关联,也可以是一个类和自身的关联。比如班级类和学生类,学生类作为成员变量存在于班级类中。 |
|
依赖 |
箭头指向入参类 |
一个类A使用到了另一个类B,但是这种使用关系是具有偶然性的、临时性的、非常弱的,但是类B的变化会影响到类A。比如班级类和学生类,班级类作为学生类的方法入参。 |
|
聚合 |
菱形部分指向整体,箭头指向个体 |
整体和部分的关系。比如大雁和雁群之间的关系,两者不是生命周期不同。 |
|
组合 |
菱形部分指向整体 |
整体和部分关系、整体部分不可分离、比聚合更强。比如大雁和大雁翅膀的关系,两者是同生共死的。 |
类图示例
对象图、包图
对象图的组成
对象图中的建模元素有对象和链 对象之间的关系,被称为链。 对象是类的实例,链是关联的实例 对象的基本特征可以归纳为对象的属性和行为两类,对象名必须小写
包图
可类比java中的包机制 包图只有依赖关系
当一个包将另一个包导入时,该包里的元素能够使用被导入包里的元 素,而不必在使用时通过包名指定其中的元素。
例如,当使用某个包中的类时,如果未将包导入,则需要使用包名加 类名的形式引用指定的类。在导入关系中,被导入的包称为目标包。 要在UML中显示导入关系,需要画一条从包连接到目标包的依赖性箭 头,再加上字符import,如图所示。
A包导入B包,则可以直接使用B包中的类。如果没有的话,则是B.类表示
活动图
活动图本质是上是一种流程图,但是活动图是面向对象的,而流程图是面 向过程的。
活动图与流程图的区别
区别 |
流程图 |
活动图 |
---|---|---|
描述 |
着重描述处理过程(顺序分支循环)流程图做不到 |
描述的则是对象活动的顺序关系所遵循的规则。 |
思想 |
面向过程 |
面向对象 |
方向 |
有着严格的处理顺序和处理时间关系(不能表示并发活动的情形) |
着重表现的是系统的行为,而非处理过程。(能够表示并发活动的情形) |
活动图实例
网吧会员系统
顺序图(跟协作图,也叫做通信图等价)
顺序图主要有:对象、生命线、消息和激活。用来建模以时间顺序安排的对象交互,并且把用例行为分配给类。
- 小人:动作的发起人
- 矩形/小圆圈:对象
- 实线箭头:调用
- 虚线箭头:返回
- 柱状:对象的生命周期,柱状不能断,在同一流程当中不能断。
- 回折线:当前对象中的方法执行过程中调用自己当前类中的方法
顺序图和协作图的异同
- 相同点
- 顺序图和协作图都可以表示对象间的交互关系,但它们的侧重点不同。
- 都能体现出系统用例的行为。
异同点 |
顺序图 |
协作图 |
---|---|---|
对象间通信方式 |
用消息的几何排列关系来表达对象间交互消息的先后时间顺序。 |
用建模对象(或角色)间的通信关系。 |
描述对象 |
按时间顺序描述对象的消息交换过程 |
它描述对象间的组织协作关系 |
协作图
与顺序图等价
时序图
时序图侧重于描述时间对系统交互的影响,因此时序图的一个重要的特 征是加入了时间元素。 时序图上的时间由左到右横跨页面。
状态图
一般不去描述参与者类对象的状态。要描述的是系统内部的 核心对象的状态。
活动图与状态图
活动图描述的是用例的行为,而状态图描述的是对象。 活动图可以包含多个对象。而状态图只可以包含一个对象。
构造实现方式图
包括有组件图跟部署图
组件图
组件图显示软件组件的组织以及组件之间的依赖关系,包 括源代码组件、二进制代码组件以及可执行组件。 包括组件、接口、依赖关系
组件图实例
组件与类的比较
- 相同点
- 两者都有名称;
- 都可以实现一组接口;
- 都可以参与依赖关系;
- 都可以被嵌套;
- 都可以有实例;
- 都可以有参数和交互;
- 不同点
- 类描述了软件设计的逻辑组织和意图
- 而组件则描述软件设计的物理实现(即:每个组件体现了系统设计中特定类的实现)
部署图
组件图用来建模软件组件,而部署图用来对部署系统时涉及到的硬件进行建模。
节点表示一种硬件。组件表示逻辑元素的物理包装,即类的物理包装,而节点表示组件的物理配置。
节点的种类:处理器跟设备。
处理器是能够执行软件、具有计算能力的节点。
设备是没有计算能力的节点,通常情况下都是通过其接口为外部提供某种服务
部署图实例
推荐阅读
-
为大型语言建模问答系统建立本地知识库 - MaxKB
-
作为 LangChain Intelligentsia 的开源大型语言建模 - 简介
-
OpenAI 研究人员构建高效的语言建模框架,填补文档中的中间空白
-
只需三分钟,即可快速建立用于语言建模的大型人工智能知识库
-
UNIX 之父肯和丹尼斯(第二部分)--也许是因为宣传的缘故,今天人们的注意力大多集中在 "野生 "黑客身上,更多关注的是他们造成的破坏,而不是他们给技术带来的突破。如果回到 50 年前,情况就完全不同了。那时的黑客更像是为了爱好而自愿加班的模范员工,他们根本不在自己家里工作。 当然,那时的电脑还远远买不起。如果你对计算机技术感兴趣,就必须投身于学术机构或巨型企业。比如通用电气或贝尔实验室。 肯尼斯-莱恩-汤普森(Kenneth Lane Thompson)就是这些老派黑客中的一员,黑客们亲切地称他为 "肯"。他出生于 1943 年的前婴儿潮时代,22 岁从大学毕业,一年后获得硕士学位--这两个学位都来自加州大学伯克利分校的电子工程和计算科学专业。随后,他进入贝尔实验室,开始了 Multics 的研发工作。 不过,他并不总是在工作。他利用大型计算机编写了一款名为 "星际迷航 "的游戏,他和同事丹尼斯-里奇(Dennis Ritchie)在办公室里玩这款游戏。因此,当贝尔实验室在 1969 年退出 Multics 计划时,他和丹尼斯都有点失望。 不过很快,他们就找到了一台闲置的 PDP-7 机器。这台机器在当时属于低端产品,售价只有 7.2 万美元,所以贝尔实验室并没有太在意。幸运的是肯重写了《星际迷航》程序,开发了基于 Multics 的新操作系统,以便在 PDP-7 上运行游戏,甚至还为操作系统开发了一种新的编程语言 "B"。 这位 Unix 之父没有得到应有的尊重。
-
达摩研究所开源视频-LaMA,为语言宏观建模增添综合视听功能
-
人工智能大语言建模的成功是否支持维特根斯坦的 "意义即使用 "立场?
-
数学建模学习笔记(十六)语言求解整数程序设计
-
数学建模 数据包络分析 (DEA) 语言实施
-
[GPT-4 最新研究] GPT-4 与科学探索:探索科学语言建模的无限可能