UML 标准建模语言

基础知识

定义

统一建模语言(Unified Modeling Language,UML)是一种为面向对象系统的产品进行说明、可视化和编制文档的一种标准语言,是非专利的第三代建模和规约语言。UML是面向对象设计的建模工具,独立于任何具体程序设计语言

分类

功能模型:从用户的角度展示系统的功能,包括用例图。
对象模型:采用对象,属性,操作,关联等概念展示系统的结构和基础,包括类图、对象图。
动态模型:展现系统的内部行为。包括序列图,活动图,状态图

结构图:是UML模型的静态部分,用于描述软件系统中的概念元素或物理元素,描述了事物的静态特征。
行为图:是UML模型的动态部分,用于描述描述事物之间的交互行为或事物的状态变化,在模型中经常用动词来表示。

UML1.4到UML2.0 部分图的名字变更:
状态图–>状态机图
协作图–>通讯图

在这里插入图片描述
在这里插入图片描述

绘图工具

VISO、Rational Rose、StarUML(韩国)、Web Sequence Diagrams、Timing Designer、Trufun Plato

发展历史

在这里插入图片描述

不同开发阶段用到的图

用例图:了解用户需求
类图:进一步细化需求
状态图、顺序图:开发层面
组件图:多个组件的关系
部署图:组件部署在哪个设备上,设备之间的架构关系

在这里插入图片描述

4+1架构

  • 逻辑视图——类图
    分解系统功能,负责反映出系统内部是如何组织和协作来实现功能的。
  • 开发视图——组件图
    用来描述软件的各个模块的组织方式,包括源程序、程序包、第三方库等。
  • 进程视图——顺序图、协作图(通信图)、状态(机)图、活动图
    主要描述系统的运行特性,关注进程、线程、并发、同步等运行时概念。
  • 物理视图——部署图
    主要描述硬件配置,综合考虑软件系统和安装、运行环境。
  • 场景视图——用例图
    从项目需求入手,将四个视图结合为一个整体,是所有视图的核心。
    逻辑视图、开发视图、进程视图、物理视图,这四个视图的元素需要协同工作以实现场景视图中给出的用例

在这里插入图片描述
在这里插入图片描述

用例图

概念理解

描述角色以及角色与用例之间的连接关系。说明是谁要使用系统,以及他们使用该系统可以做些什么。

用例图被广泛应用于系统的需求建模阶段,并在系统的整个生命周期中被不断细化

从外部定义系统功能,将需求与设计完全分离开来(不关心系统内部如何完成);强调从最终用户的角度来理解软件系统的需求。

三要素

参与者(用户):可以是真实的人,其他系统,进程。 用一个人形状图标表示。
用例:
关系:包括关联关系(Association)、扩展关系(Extend)、包含关系(Include)、泛化关系(Generalization)

依赖关系(dependency) 包括扩展关系和包含关系
表示方法: 用带箭头的虚线表示

参与者

定义

描述的是谁来做
参与者(Actor)是指存在于系统外部并直接与系统进行交互的外部实体的抽象

参与者的表示方法

在这里插入图片描述

用例

定义

描述的是做什么
用例(Use Case)是对一组动作序列的描述, 系统执行这些动作序列来为参与者产生一个可观察的结果值。

注意事项

用例是动宾短语
用例是一个完整的功能,不能是部分功能。(一次完整的人机交互序列)
用例具有观测意义。
用例由请求或者观测触发,不存在没有参与者的用例,也不存在自启动的用例

用例的表示

一个外部可见的功能单元,椭圆形图标,
用例名称可以写在椭圆里面或者椭圆下面
用例名可以使用简单名称,也可以使用路径名

在这里插入图片描述

正确与错误示例

1)错误示例一:功能不完整
在这里插入图片描述
2)错误示例二:不具有可观测意义
在这里插入图片描述

在这里插入图片描述

关系

关联关系

表示方法:用带箭头的实线表示,由参与者指向用例

在这里插入图片描述

泛化关系

泛化关系(generalization)表示类与类之间的继承关系,接口与接口之间的继承关系,或类对接口的实现关系。一般化的关系是从子类指向父类的,与继承或实现的方法相反。

用来表示参与者之间的关系或者用例之间的关系
表示方法:带空心箭头的实现,
方向:子用例(特殊用例)指向父用例(一般用例)

在这里插入图片描述

包含关系

一个基础用例包含另外几个包含用例
表示方法:带箭头的虚线表示,包含《include》字样
方向:由基础用例指向包含用例

扩展关系

子用例(扩展用例)扩展父(基)用例,扩展是指行为增强
表示方法:子用例指向父用例

在这里插入图片描述

系统边界

用例在系统内部,参与者在系统外部
系统名称在系统边界内部,靠近上面\

在这里插入图片描述

用例规约

1)说明

对用例的具体描述,每一个用例都要有规约

2)包含内容

简要说明
用例名称 ,用例编号 ,参与者 ,用例简述
场景描述
触发器,前置条件 ,基本事件流 ,扩展事件流 ,结论 ,后置条件
其他事项
特殊需求, 扩展点 ,优先级

在这里插入图片描述

用例图示例

在这里插入图片描述

类图

概念理解

类图是描述系统中的类,以及各个类之间的关系的静态视图。能够让开发人员在正确编写代码以前对系统有一个全面的认识

类的组成

类名
属性:权限 属性名:类型
方法 权限 方法(参数):返回类型

类的属性、方法权限

属性和方法权限 private protected friendly public
对应的符号表示依次是 - # ~ +

类名表示

简单类名(类名)
路径类名(包名:类名)

抽象类名和抽象方法使用斜体

类图的画法

在这里插入图片描述

接口的画法

方法发一:接口使用一个带有名称的小圆圈来进行表示。

在这里插入图片描述

方法二:在接口名的上面加一个《interface》 关键字

在这里插入图片描述

关系

关系强弱

泛化=实现>组合>聚合>关联>依赖

意义:能用组合就不用聚合,能用聚合就不用一般关联,能用一般关联就不要用依赖

关系箭头指向总结

在这里插入图片描述

关系含义总结

聚合:has a
组合:contains a
依赖:use a
泛化:is a

泛化关系

1)说明

继承关系,耦合度最大的关系,表示一般与特殊的关系
是一种 is-a 的关系

2)类图

带空心三角箭头的实线来

在这里插入图片描述

实现关系

1)说明

接口与实现类的关系

2)代码

public interface Shape{
	public double computeArea();
	public double computePerimeter();
}

3)类图

带空心三角箭头的虚线来表示,方向由实现类指向接口

在这里插入图片描述

组合关系

1)说明

整体与部分的关系,整体与部分是不可分割的,整体实例销毁部分实例也跟着销毁

2)代码

class Computer {
    private Monitor monitor = new Monitor();
    private Mouse mouse = new Mouse();
	
	public Computer(){
		monitor = new Monitor();
		mouse = new Mouse();
	} 
}

class Monitor {
}
class Mouse {
}

2)类图

用实心棱形和实现表示
在这里插入图片描述

聚合关系

1)说明

整体与部分的关系 ,整体与部分是可以分开的,整体实例销毁,部分实例并不会跟着销毁

2)代码

class Computer {
    private Monitor monitor;
    private Mouse mouse;

    public Computer(Monitor monitor, Mouse mouse) {
        this.monitor = monitor;
        this.mouse = mouse;
    }
}

class Monitor {
}

class Mouse {
}

3)类图

用空心棱形和实线表示

在这里插入图片描述

关联关系

1)说明

A 类拥有B类的成员变量
A 关联 B

2)代码

class Person {
    private IdCard idCard;
}
class IdCard {
}

3)类图

单向关联

在这里插入图片描述

双向关联

在这里插入图片描述

自关联

在这里插入图片描述

依赖关系

1)说明

依赖关系是类与类之间耦合度最弱的关系
A类中用到了B类
A类中有B类型的成员变量
B类是A类方法的返回类型
B类是A类方法的参数类型
A类的方法中用到了B类

2)示例

A类依赖B类,A类指向b类,用带箭头的虚线表示

在这里插入图片描述

对象图

概念理解

对象图包括对象和对象之间的关系,其中对象是类的实例

对象图作为系统在某一时刻的快照,是类图中的各个类在某一个时间点上的实例及其关系的静态写照

基于类图画对象图

对象的画法

图中对象包括两部分:对象的名称和对象的属性
对象的名称写法:“对象名:类名”
对象的属性写法:“权限 属性名 = 属性值”
对象图中不包括方法,因为所有对象的操作都是一样的
对象图关系只有一对一关系

在这里插入图片描述

举例

在这里插入图片描述

活动图

概念理解

描述活动的顺序,展现从一个活动到另一个活动的控制流,活动图着重表现从一个活动到另一个活动的控制流,是内部处理驱动的流程

活动图是面向对象的,而流程图是面向过程的。
活动图可以理解为uml中的流程图

根据用例图细化出活动图

基本符号

起始活动:起始节点,有且仅有一个
结束活动:结束节点,可以有多个
迁移:执行顺序,一个活动执行完后转到下一个活动
对象流:对象
并发分劈:一个活动执行完后同时执行下面几个活动
并发接合:多个活动都执行完后执行下一个活动
泳道:用于区分各个组织所负责的活动部分,例如示例中学生与老师是两个不同的泳道
在这里插入图片描述

举例

在这里插入图片描述

在这里插入图片描述

状态图

概念理解

状态图(Statechart Diagram)是描述一个实体基于事件反应的动态行为,显示了该实体如何根据当前所处的状态对不同的事件做出反应

状态图由状态和迁移组成

可以用visio工具绘制

元素

状态 分上下两格,上格状态名称,下格是当前系统处于该状态的时候要触发的事件
迁移(转换)从一个状态转换转换成林外一个状态所需要触发的事件

状态

1)种类

简单状态(simple)只有状态名称得状态
组合状态(composite) 含有子状态的状态叫做组合状态
历史状态(history)记录该状态的历史执行状态
结合状态(junction)将两个转换连接成一次就可以完成的转换,状态机中作为一个综合转换一部分的伪状态
起始状态(initial)实心圆点表示,每个状态图有且只有一个起始状态
终止状态(final)内嵌原点表示,状态图可以有多个终止状态

简单状态

只有状态名字

在这里插入图片描述

普通状态

包含状态名字和内容,内容包括入口动作,出口动作,内部动作,内部转换

在这里插入图片描述

历史状态

洗衣机暂停后,会保存当前正在运行的子状态,洗衣机继续工作后会恢复到之前的子状态

要记忆更深层次的嵌套状态使用圆圈加H*

在这里插入图片描述
在这里插入图片描述

并发状态

多个并发状态用虚线分隔。并发状态由个并发子图组成,每个并发子图叫做并发段(并发区域 Concurrent Regions)

在这里插入图片描述

进入节点(Entry point)& 退出节点 (Exit point)

在这里插入图片描述

转移(Transitions)

转移的分类

外部转换
内部转换
入口动作
出口动作

内部转换

在状态1不变的情况下继续进入状态1-1,
反向箭头:同理

在这里插入图片描述

外部转换

退出状态二,重新进入状态2-1
反向箭头同理

在这里插入图片描述

入口动作和出口动作

在这里插入图片描述

自身转换

在这里插入图片描述

转移的组成

源状态(source state)
事件触发(event trigger): 导致转移发生的事件,信号
监护条件(guard condition ): 达到某一条件时,事件才会转移
动作(action):包括进入动作(Entry Action )和退出动作(Exit Action),进入一个状态和退出一个状态所发生的动作,可以理解一个钩子
结果(Effect):对象状态转移后的结果(影响),事件触发后,在进入状态之前会做什么动作 。多个Effect 如果是同样的,可以写成动作
目标状态(target state)

触发事件

在这里插入图片描述

动作

在这里插入图片描述

状态图举例

在这里插入图片描述

时序图

概念理解

时序图(时间顺序图)也叫顺序图、序列图,它通过描述对象之间发送消息的时间顺序显示多个对象之间的动态协作

根据用例图来细化出顺序图,类图。顺序图是动态的。类图是静态的

元素

角色:用一个人形图标表示
对象:使用 “对象名:类名” 表示
生命线:对象下面一条虚线,表示对象存活的时间
控制焦点(Activation):又叫激活条,火花。对象执行某个操作的时间段,在生命线上用一段小矩形表示,可以理解为方法中代码片段
消息:方法调用,接口请求

对象

对象的表示的三种方法

1)对象名:类名
2):类名
3)对象名

图示注意事项

1)交互频繁的对象尽量靠拢
2)初始化整个交互活动的对象放在最左边
3)角色对象是名字,消息是动词

创建对象

在这里插入图片描述

销毁对象

在生命线的尽头用符号X表示

在这里插入图片描述

消息

消息的分类

同步消息
异步消息
返回消息

同步消息:消息的发送者把控制消息传递个消息的接收者,等待接收者返回消息
使用实现+实心三角箭头

异步消息:消息的发送者把控制消息传递给消息的接收者后,继续自己的活动,不等待接受者返回消息
使用实线+线型箭头表示

返回消息:接受者过程调用结束后返回消息
使用实虚线+线型箭头表示

自调用消息
同一对象不同方法的调用

组合片段

片段表示方法

在这里插入图片描述

具体片段表示方法

Opt (选项) 一个可能发生或者不可能发生的序列,

在这里插入图片描述
在这里插入图片描述

Alt (条件/抉择) 达到某种条件才执行Alt片段, 否则执行Else 片段

在这里插入图片描述

Loop (循环)当处于某种条件内,一直循环做代码片段

在这里插入图片描述

Par (并行) 片段中的事件可以交错执行

在这里插入图片描述

Break (中断)循环的临界条件

在这里插入图片描述

Critical (关键)用在par 和seq 中,表示该片段中的事件不能与其他并行片段中的事件交错执行

在这里插入图片描述

Seq (弱顺序) 有多个片段时,涉及同一生命线的消息必须按照顺序发生,如果是不同生命线的消息,可以交错执行

Strict (强顺序)有多个片段时,这些片段必须按顺序发生
Consider (考虑) 此片段描述的消息列表
Ignore (忽略) 此片段未描述的消息列表,但是存在于系统运行中
Assert (断言) 操作片段指定唯一有效序列, 通常用在 Consider 或 Ignore 片段中。
Neg (否定) 此片段中显示的序列不得发生, 通常用在 Consider 或 Ignore 片段中。

顺序图示例

示例一

在这里插入图片描述

示例二

在这里插入图片描述

示例三

在这里插入图片描述

协作图

概念理解

协作图也叫通信图,合作图,是一种交互图

顺序图更强调时间和顺序,而协作图强调对象的交互关系。

两都表示对象间的关系,但是表述的方式不同,协作图更有利于理解对给定对象的所有影响。

在顺序图上,对象的初始化和消亡的时间是很清楚的,但是协作图中无法显示。

提倡在分析中使用顺序图,在设计中使用协作图。

随着对象和消息数量的增多,理解协作图将越来越困难。

两者在语意上是互通的,可以互相转换。

元素

对象:用长方形框表示对象。具体细节同时序图
连接:使用实线标记两个对象之间的连接。
消息:由标记在连接上方的带有标记的箭头表示。

协作图举例

在这里插入图片描述

组件图

概念理解

组件图又称构建图,软件系统中遵从并实现一组接口的物理的、可替换的软件模块

组件代表系统的一个物理实现块,代表逻辑模型元素如类、接口、协同等的物理打包

一般来说,组件就是一个实际的文件或者多个文件组成的可执行程序,比如一个jar包

组件是可以部署的,是一组类通过协作完成的,组件是通过接口访问的

元素

组件:组件可以是二进制文件、源码文件、可执行程序
接口:一组操作的集合,是组件提供的服务
部件:组件的一部分
端口:被封装的组件与外界的交互点
连接件(关系):在特定语境下组件中两个部件之间或者两个端口之间的通信关系,包括关联关系和泛化关系

组件

组件的分类

  1. 配置组件(Deployment Component):运行系统需要配置的组件,是形成可执行文件的基础—操作系统、JAVA虚拟机、DBMS;
  2. 工作产品组件(Work Product Component):包括模型、源代码和用于创建配置组件的数据文件,它们是配置组件的来源—UML图、java类和数据库表;
  3. 执行组件(Execution Component):在运行时创建的组件,是最终可运行的系统产生的允许结果—.net组件

组件的表示方法

1)表示方法一:由左侧带有两个突出小矩形的矩形来表示

在这里插入图片描述

2)表示方法二:带《component》的矩形表示,右上角带由表示方法一的形状
在这里插入图片描述

关系

实现关系

在这里插入图片描述

依赖关系

在这里插入图片描述

接口(UML2.0)

在这里插入图片描述

端口(UML2.0)

端口由小方块表示,端口可以有端口名

端口描述了在构件与它的环境之间以及在构件与它的内部构件之间的一个显示地交互点

端口是一个封装构件的显示的对外窗口,所有进出构件的交互都要通过端口。

使用端口能在更大的程度上增加构件的封装性和可替代性。

端口是构件的一部分,端口的实例随着它们所属的构件的实例一起被创建和撤消。

在这里插入图片描述

连接器

定义

端口与端口之间的连接

连接器的分类

直接连接器
接口连接器
委派连接器(内部端口与外部端口)

在这里插入图片描述

组件图示例

示例一(对系统建模)

在这里插入图片描述

示例二(对源代码建模)

在这里插入图片描述

示例三(对可执行程序建模)

部署图

概念理解

部署图(Deployment Diagram)用于描述系统硬件的物理拓扑结构以及在相关节点上运行的软件工件(artifacts)。
工件是系统开发过程产生的具体的元素,如可执行文件、库、档案文件、数据库模式、配置文件等。

部署图中的节点是硬件部分,组件图中的组件时软件部分
组件运行于节点之上,见示例

元素

节点(node)
关系(relationship):节点之间的关系

节点

节点的分类

1)UML1.0节点的分类

处理器:具有计算能力的节点。例如服务器。用带阴影立方体表示
设备:不具有计算能力,可能作为处理器的输入输出或者外部连接。例如打印机,读卡器。用全空的立方体表示

在这里插入图片描述

2)UML2.0节点分类

设备:服务器
执行环境:一种软件节点

在这里插入图片描述
在这里插入图片描述

节点名称的表示

简单名称:数据库服务器
受限名称:Server::数据库服务器(节点类型:节点名称)

关系

1)设备与设备之间的关系通常为物理连接
在这里插入图片描述
2)执行环境与执行环境的关系通常为通信协议。常见的协议有http,jdbc ,odbc,rmi,rpc,webservice
在这里插入图片描述

部署图示例

在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值