文章目录
一.UML简介
1. UML是什么
统一建模语言(Unified Modeling Language,UML)是一种为面向对象系统的产品进行说明、可视化和编制文档的一种标准语言,是非专利的第三代建模和规约语言。UML是面向对象设计的建模工具,独立于任何具体程序设计语言。
2. UML的目标
-
为建模者提供可用的、富有表达力的、可视化的建模语言,以开发和交换有意义的模型。提供可扩展性和特殊化机制以延伸核心概念。
-
支持独立于编程语言和开发过程的规范
-
为理解建模语言提供正式的基础。
-
推动面向对象建模工具市场的成长。
-
支持更高级的开发概念。
3. UML应用范围
UML最广泛的应用是对软件系统进行建模。
- 需求分析阶段:通过建立用例图等模型来描述系统的使用者对系统的功能要求。
- 分析和设计阶段:诵过类和对象等主要概念及其关系建立静态模型,对类、用例等概念之间的协作进行动态建模,为开发工作提供详尽的规格说明。
- 开发阶段:将设计的摸型转化为编程语言的实际代码,指导并减轻编码工作。
- 测试阶段:用UML图作为测试依据。
UML主要应用于软件密集型系统,例如:
- 企业信息服务
- 银行与金服融务
- 电信
- 运输
- 国防
- 航天
- 分布式系统
二.UML体系结构
1. UML构造块
构造块:UML基本建模元素。
构造块的类型:
- 事物
- 关系
- 图
(1)事物
事物:是对模型中关腱元素的抽象。描述的是关键部件。
事物分为:结构事物、行为事物、分组事物、注释事物。
-
结构事物:描述模型的静态结构。
结构事物分为:
-
类
用多层矩形表示,矩形框中从上到下依次为类名、属性、方法。
如下如,类名为
Windows
,属性有Origin
、size
,方法有open()
、close()
、move()
、display()
。 -
接口
使用多层矩形表示,矩形框中从上到下依次为接口名、方法。
如下图,接口名为
Windows
,方法有open()
、close()
、move()
、display()
。接口还有简化表示,IWindow
表示供给接口,IPaint
表示需求接口。 -
协作
协作是多个元素之间的交互动作,用虚线椭圆来表示,虚线椭圆内部填写协作名称。
-
用例
用例用来描述一组动作序列,用实线椭圆来表示,实线椭圆内部填写动作名称。
如下图所示是一个下订单的用例。
-
组件
组件是系统中封装好的模块化部件,仅将外部接口暴露出来。使用矩形框+两个小矩形来表示,矩形框内部填写组件名称。
如下图所示是一个订单组件。
-
结点
结点是在软件部署图所用到的物理元素名称,其本质是一种计算机资源。使用立方体表示,立方体内部填写结点名称。
如下图,这是一个服务器结点的描述。
-
-
行为事物:描述模型中的动态元素,又称为动作事物。
行为事物分为:
交互:对象间消息交换的行为,或为完成指定目标而设置的相关规则。包含消息、状态和连接。
状态机:对象在生命周期内的状态序列及转移规则。包含状态、转移、条件(事物)和活动。
活动:一个计算过程包含的动作序列。
-
消息
消息是交互的一种,用实箭头表示。实箭头从发出者指向接收者,实箭头上方注明操作名称。
-
状态
状态是状态机的重要构成,使用圆角矩形表示,圆角矩形中写明状态名称。
-
活动
表示操作的过程信息,使用圆角矩形表示,圆角矩形内写明活动名称。
-
-
分组事物:描述模型中的组织结构,用于组织设计本身,而非组织构建。
分组事物包括:包、子系统、层。
-
包
包是最常用的分组事物,使用小矩形+大矩形来表示,在小矩形中填写包的名称,在大矩形中填写包含的元素。
-
-
注释事物:模型中的注释元素,用于描述、说明和标注任何模型元素。
注解:是最主要的注释事物实例,是对单个或一组元素进行约束或解释的文本。使用折角的矩形框表示,在图形中填写注释内容。
(2)关系
关系是模型元素之间具体化的语义连接,表示事物之间联系的方式,UML中使用关系将事物结合到了一起。
主要的关系有:关联关系、依赖关系、泛化关系、实现关系。
-
关联关系
描述一个事物的对象与另一个事物的对象的联系,表示一种结构关系。关联关系包括聚合和组合。
0…1 表示可以有0个或者1个实例
0…* 表示对实例的数目没有限制
1 表示只能有一个实例
1…* 表示至少有一个实例
-
聚合
整体与局部的包含、从属关系。在UML中使用带空心菱形的实心线表示,菱形指向整体。聚合是整体与部分之间的关系,并且部分可以脱离整体单独存在,这种关系不属于继承。
下图将孩子和家庭的关系表示为聚合。
-
组合
强依赖的特殊聚合关系,部分不能脱离整体。在UML中使用实心菱形的实线表示,菱形指向整体。
如下图为大脑和人的组合关系。
-
-
依赖关系
描述一个元素的变化影响另一元素的语义。依赖关系是单向的,如果是双向的,则两个元素为强耦合关系,软件开发应避免这种现象。依赖具有偶然性、临时性,是非常弱的关系,但是类B的变化会影响到类A。举个例子,如某人要过河,则人与船的关系就是依赖,人过河之后,与船的关系就解除了,因此是一种弱的连接。
依赖关系是一种使用的关系,类A使用到了类B,在代码层面,为类B作为参数被类A在某个方法中使用。
使用带箭头的虚线表示,箭头指向被使用者。
-
泛化关系
指一个类(子类、子接口)继承另外一个类(称为父类、父接口)的功能,并可以增加它自己新功能的能力。
使用带三角箭头的实现表示,箭头指向父类。
-
实现关系
指一个类实现接口(一个或者多个),表示一个元素定义规格说明,另一元素按照规格具体实现。
使用带三角箭头的虚线表示,箭头指向接口。
典型的实现关系代表:
-
接口与实现接口功能的类或组件。
-
用例与实现该用例的协作。
-
(3)图
图是一组模型元素的图形化表示。一般由事物与各种关系构成。
图的类型:
结构图:捕获事物与事物之间的静态关系,用来描述系统的静态结构模型。
行为图:捕获事物的交互过程如何产生系统的行为,用来描述系统的动态行为模型。
UML1中的图:
UML2中的图:
UML2与UML1的比较:
例如下图是描述机票预订系统的用例图和类图。
2. 通用机制
通用机制的作用:用于对建模元素进行补充,从而完善UML的语义表达。
- 建模可以遵循不同的模式,就像建筑具有不同的风格。
- 模型的风格“风格”与“模式”必须进行补充语义说明。
通用机制的种类:规格说明、修饰、通用划分、扩展机制。
(1)规格说明
指从文本维度对模型的细节进行描述。
- 规格说明使可视化视图和文字视图的分离。
- 规格说明通常不在图中直接显示,而是通过工具来获得。
如下图是对用例图进行规格说明。
(2)修饰
描述建模元素的细节信息。
-
修饰是对规格说明的文字或图形的表示。
(3)通用划分
建模时对事物的划分方法。是一种保证不同抽象层次建模的机制。
通用划分的类型:类型与实例、接口与实现、用例与协作、类型与角色。
-
类型与实例
通用描述与某个特定元素的对应。
类型:通用元素。
实例:特定元素。
例子:类/对象就是典型的类型与实例的划分,除此之外还有用例用例/场景、组件/组件实例、节点/节点实例等。
如下图,Customer是一个类型,Jan是Customer的对象,后两种为简化的实例。
-
接口与实现
强制规范与实现的对应。
接口:声明了服务的约定,行为的契约。
实例:负责执行接口的全部语义实现该项服务。
例子:接口/类、用例/协作、操作/方法。
如下图AnimalBehavior是一个接口,Tiger、Bird、Frog是这个接口的实现类。
(4)扩展机制
为了扩充在某些细节方面的描述能力,UML允许建模者在不改变整体语言风格的基础上,定义一些通用性的扩展。
在使用扩展机制的时候需要注意,要避免影响其他机制的展示,如果当前机制能够满足需要,尽量不使用扩展机制。
扩展机制的类型:构造型、标记值、约束。
-
构造型
基于已有的建模元素引入新的建模元素。将一个已有的元素模型进行修改或精化,创造出一种新的模型元素。
- 构造型的信息内容和形式与已存在的基本模型元素相同,但拥有不同的含义与用法。
- 表示方法:一个双尖括号内附构造型名称,一般放在已有的基本模型元素符号上方。
如图,类和接口都使用矩形方框表示,在接口中增加了构造型的扩展。
-
标记值
扩展UML构造型的特性,可以用来创建构造型的详述信息。关于模型元素本身的一个属性的定义,即一个元属性的定义。是用来为事物添加新特性、新信息。
标记定义被构造型所拥有。标记可以用来存储元素的任意信息,它是一个名称与值组合,表现为形如“property=value”的字符串形式。
标记名、符号和值被写在注释中,如图对于构造型
projectMgmt
,增加了标记值,其中明确了作者为ztypl
,时间为2017/11/1
。 -
约束
扩展UML构造块的语义,可以用来增加新的规则或修改现有的规则。是使用某种文本语言中的陈述句表达的语义条件或者限制。是施加在元素上的限制。
- 约束包括一个约束体与一种解释语言。
- 约束使用大括号{}中的文本串表示。
如图对类
Precesser
进行约束,约束的内容为synchronize when called
。有时候需要在元素之间的关系中增加约束,例如下图。
如果要精确地详述约束,可以使用UML的对象约束语言OCL来表达,如下图。
3. “4+1”架构
“4”是指逻辑视图、过程视图、物理视图、开发视图;“1”是指场景视图。
视图模型从5个不同的视角描述了软件的体系结构。
“4+1”架构方法采用用例驱动,在软件生命周期的各个阶段对软件进行建模,从不同视角对系统进行解读,从而形成统一软件过程架构描述。
(1)逻辑视图
主要用来描述系统的功能需求,反应出系统内部是如何组织和协作来实现功能的,不涉及具体的编译即输出和部署。
逻辑视图主要对应UML中的类图和对象图。
- 构件:类、类服务、参数化类。
- 连接件:关联、包含、使用、继承、实例化。
(2)开发视图
主要用来描述软件模块的组织与管理,包括源程序、程序包、支持软件第三方仓库等。服务于软件编程人员,方便后继的设计与实现。
主要对应UML中的组件图。
- 构件:模块、子系统、层。
- 连接件:参照相关性、模块/过程调用。
(3)进程视图
主要描述系统的运行特性,侧重系统的性能和稳定性,主要关注进程、线程、对象、并发、同步、通信等运行时概念。服务于系统集成人员方便后续性能测。
主要对应UML中的顺序图、协作图、状态机图。
- 构件:进程、简化进程、循环进程。
- 连接件:未指定消息、远程过程调用(RPC)、双向消息、事件广播。
(4)物理视图
主要描述硬件配置。服务于系统工程人员,解决系统的拓扑结构、系统安装、通信等问题。主要对应UML中的部署图。
- 构件:处理器、计算机、其它设备。
- 连接件:通信协议。
(5)场景试图
又称为用例视图,用于刻画构件之间的相互关系,将四个视图有机地联系起来。它实际上不包含新的内容,而只做了4个视图的整合工作。场景视图是所有视图的核心,所谓用例驱动就是指系统应通过分析用例来决定系统应该提供的功能,因而场景试图是设计的核心,也是设计和检验的标准。
主要对应UML中的用例图和活动图。
- 构件:用例、活动等。
- 连接件:关联、泛化、依赖等。
(6)5种视图间的关系
- 逻辑视图,设计的对象模型(使用面向对象的设计方法时)。
- 进程视图,捕捉设计的井发和同步特征。
- 物理视图,描述了软件到硬件的映射,反映了分布式特性。
- 开发视图,描述了在开发环境中软件的静态组织结构。
- 场景视图,描述最终用户需求,为整个技术架构的上线文环境。
参考视频:https://www.icourse163.org/learn/LYNC-1462091169?tid=1465502452#/learn/announce