什么是UML统一建模语言
1、UML概述
1.1、什么是UML
标准定义:统一建模语言(Unified Modeling Language,UML)是描述、构造和文档化系统的可视化语言。为面向对象软件设计提供统一的、标准的、可视化的建模语言(独立于任何具体程序语言)。适用于描述以用例为驱动,以体系结构为中心的软件设计全过程。
为什么需要统一建模语言?
在《Fundamental Object-Oriented Design in UML》 一书中总结了UML的主要目的:
1)Provide a ready-made, expressive visual modeling language for users to develop and exchange meaningful models。(为用户开发和交换有意义的模型提供现成的、有表现力的可视化建模语言)
2)Provide Extensibility and Specialization mechanisms for the core concepts。(为核心概念提供可扩展性和专门化机制)
3)Independent of a specific programming language and development process。(独立于特定的编程语言和开发过程)
4)Provides a formal basis for understanding modeling languages。(为了解建模语言提供一个正式的基础)
5)Encourage the development of the market for object-oriented tools。(鼓励面向对象工具市场的发展)
6)Supports higher-level development concepts such as collaboration, frameworks, patterns, and components。(支持更高层次的开发概念,如协作,框架,模式和组件)
7)Integrate Best Practices。(整合最佳的工作方法)
统一建模总的来说就是:试图用标准化的语言来覆盖整个软件过程,让不同团队不同角色可以用相同的语言顺畅的沟通,为开发者或开发工具使用这些图形符号和文本语法为系统建模提供了标准。
统一的意义就是形成标准(所谓标准,就是所有人都明白的表述,所有人都遵从的格式)并通过模型清晰的把人、事、物和规则描述清楚。
1.2、UML简介
能够实现UML建模的工具有:IBM Rational Rose、StarUML、Microsoft Visio、Enterprise Architect等。在 UML 中,所有的描述由事物、关系和图这些构件组成。
注:1997年,发布UML1.0(图绿色为UML1.X提供,到UML1.5提供了9种),2005年发布UML2.0(图蓝色增加了4种)进一步强化了图的表达能力,同时也增加了其复杂性。
1.3、UML事物概述
1.3.1、什么是UML事物
事物是UML模型中面向对象的基本模块,代表物理上或概念上的元素,是抽象化的最终结果。UML中的事物可分为4种,分别是结构事物、行为事物、分组事物、注释事物。
1.3.2、结构事物
结构事物是模型中的静态部分,用以呈现概念或实体的表现元素。
结构事物分别是类、接口、用例、通讯(协作)、活动类、节点和组件等7种类型。在UML中都有自己的图形表示,用于组成各种图,描述系统功能。
事物 | 解释 | 图例 |
---|---|---|
类(Class) | 具有相同属性、方法、关系和语义的对象集合 | |
接口(Interface) | 指一个类或构件的一个服务的操作集合,它仅仅定义了一组操作的规范,并没有给出这组操作的具体实现 | |
用例(User Case) | 指对一组动作序列的描述,系统执行这些动作将产生一个对特定的参与者(Actor)有价值且可观察的结果 | |
通讯(协作) | 定义元素之间的相互作用 | |
组件(Component) | 描述物理系统的一部分 | |
活动类(Active Class) | 指对象有一个或多个进程或线程。活动类和类很相象,只是它的对象代表的元素的行为和其他元素是同时存在的 | |
节点(Node) | 定义为运行时存在的物理元素 |
1.3.3、行为事物
行为事物代表时间和空间上的动作。交互和状态机是两个动态事物元素。
事物 | 解释 | 用例 |
---|---|---|
交互(Interaction) | 包括一组元素之间的消息交换 | |
状态机(State Machine) | 由一系列对象的状态组成 |
1.3.4、分组事物
包是分组事物的重要部分,可以将彼此相关的元素进行分组,它纯粹是概念上的,只存在于开发阶段。
事物 | 解释 | 用例 |
---|---|---|
包(Package) | UML中唯一的组织机制 |
1.3.5、注释事物
UML模型注释或解释部分。
事物 | 解释 | 用例 |
---|---|---|
注释(Note) | 用于解析说明 UML 元素 |
1.4、UML图概述
图是事物和关系的可视化表示。到UML2.0 一共有 13 种图。
图名称 | 解释 |
---|---|
类图(Class Diagrams) | 用于定义系统中的类 |
对象图(Object Diagrams) | 类图的一个实例,描述了系统在具体时间点上所包含的对象及各个对象之间的关系 |
组件图(Component Diagrams) | 一种特殊的 UML 图,描述系统的静态实现视图 |
部署图(Deployment Diagrams) | 定义系统中软硬件的物理体系结构 |
活动图(Activity Diagrams) | 用来描述满足用例要求所要进行的活动及活动间的约束关系 |
状态(机)图(State Machine Diagrams) | 用来描述类的对象的所有可能的状态和时间发生时,状态的转移条件 |
用例图(Use Case Diagrams) | 用来描述用户的需求,从用户的角度描述系统的功能,并指出各功能的执行者,强调谁在使用系统、系统为执行者完成哪些功能 |
时序图(Sequence Diagrams) | 描述对象之间的交互顺序,着重体现对象间消息传递的时间顺序,强调对象之间消息的发送顺序,同时显示对象之间的交互过程 |
通讯(协作)图(Communication (Collaboration) Diagrams) | 描述对象之间的合作关系,更侧重向用户对象说明哪些对象有消息的传递 |
包图(Package Diagrams) | 对构成系统的模型元素进行分组整理的图 |
组合结构图(Composite Structure Diagrams) | 表示类或者构建内部结构的图 |
定时图(Timing Diagrams) | 用来显示随时间变化,一个或多个元素的值或状态的更改,也显示时间控制事件之间的交互及管理它们的时间和期限约束 |
交互概览图(Interaction Overview Diagrams) | 用活动图来表示多个交互之间的控制关系的图 |
1.5、UML关系
UML中共分为6种关系,根据类与类之间的耦合度从弱到强排列,分别是依赖、关联、聚合、组合、泛化和实现关系。
1.5.1、依赖关系
依赖关系的定义:是两个事物之间的语义关系,其中一个事物(独立事物)发生变化,会影响到另一个事物(依赖事物)的语义。
在面向对象程序中,就是一个类的实现需要另一个类的协助,它是对象之间耦合度最弱的一种关联方式。
【虚线箭头】在UML 类图中,依赖关系使用带箭头的虚线来表示,箭头从使用类指向被依赖的类。
例如:
在一个类Person中的Call依赖于Phone,不管是谁的电话,给电话就能通知。
1.5.2、关联关系
定义:关联关系是一种结构关系,它指明一个事物的对象与另一个事物的对象间的联系(即表示两者有关系)。
在面向对象程序中,是对象之间的一种引用关系,用于表示一类对象与另一类对象之间的联系。关联可以是双向的,也可以是单向的。
【实线箭头】在 UML 类图中,双向的关联可以用带两个箭头或者没有箭头的实线来表示,单向的关联用带一个箭头的实线来表示,箭头从使用类指向被关联的类。
例如:
老师和学生是师生关系,一个老师可以教多个学生,一个学生可以在多个老师那里学习。老师和学生是双向关联的一种关系。
1.5.3、聚合关系
聚合关系是一种整体与部分的关系。且部分可以离开整体而单独存在。
在面向对象程序中,一般是以成员变量的形式存在。
【空心菱形实线】在 UML 类图中,聚合关系可以用带空心菱形的实线来表示,菱形指向整体。
例如:
电脑有键盘可以输入,但是作为键盘是可以拿出来单独售卖的,不需要一一匹配。
1.5.4、组合关系
组合关系是一种整体与部分的关系。但部分不能离开整体而单独存在,组合关系是关联关系的一种,是比聚合关系还要强的关系。
在面向对象程序中,整体对象可以控制部分对象的生命周期,一旦整体对象不存在,部分对象也将不存在。一般也是以成员变量的形式存在,但是这个成员变量性对整体来说是一种密不可分的关系。
【实心菱形实线】在 UML 类图中,组合关系用带实心菱形的实线来表示,菱形指向整体。
例如:
人是一个整体,头是人身体的一部分,能think()必须要人还活着。
1.5.5、 泛化关系
定义:泛化关系是一种特殊的关系(也称继承关系)。意味着一个元素是另一个元素的特例;比如:鸟是动物的一个种类;
在面向对象程序中,泛化关系是对象之间耦合度最大的一种关系(实现关系虽然耦合度更大,但是接口不能创建对象),使用面向对象的继承机制来实现泛化关系。
【空心三角箭头】在 UML 类图中,泛化关系用带空心三角箭头的实线来表示,箭头从子类指向父类。
例如:
不同的动物之间有共性也有特性,鸟除了会睡觉,还会飞。
1.5.6、实现关系
定义:实现是类元之间的语义关系,其中一个类元指定了由另一个类元保证执行的契约(即描述类和接口之间的继承关系);
在面向对象程序中,类实现了接口中所声明的所有的抽象操作。
在 UML 类图中,实现关系使用带空心三角箭头的虚线来表示,箭头从实现类指向接口。
例如:
规定一个支付接口,具有支付功能,但是具体使用哪种支付由子类实现。
2、模型图的简介
2.1、类图
2.1.1、定义及概述
定义:类图(Class Diagram)是描述类、接口、协作以及他们之间静态结构和关系的一种静态模型。我们可以在类图的基础上,使用状态图、组件图和通讯图等。
类图主要由类、接口和各种关系(依赖、关联、聚合、组合、泛化和实现关系)组成。
类图的组成元素:简单类、接口和类、类、活动类、多例类、接口、约束等;
2.1.2、使用说明
类的构成:一个类通常由名称(Name)、属性(Attribute)和操作(Operation)构成。当然类的构成还包含类的职责(Responsibility)、约束(Constraint)和注释(Note)等。
前面在介绍UML关系的时候,其实就看到了很多的类图。下面就再介绍一些用法上的细节。
-
关于类的名称
类的名称通常首字母大写,也可以在类名下写上包名。
-
关于类的属性
一般格式为:[可见性] 属性名称 [:数据类型] [=初始值] [{属性字符串}]
1)可见性分为
+:public(公有属性),其它类可以访问该属性
-:private(私有属性),不能被其它类访问(默认为私有)
#:protected(保护属性),只能被本类及其派生类访问
~:default(包内可见),可以被本包中的其它类访问
-
关于类的操作
一般格式为:[可见性] 操作名称 [(参数)][:返回类型][{属性字符串}]
可见性和上面一样。返回类型的话如果是void可以省略。
-
关于类的职责、约束和注释
如图所述。注释可以接类、接口或他们的连接线上。
2.2、用例图
2.2.1、定义及概述
是由参与者(Actor)、用例(Use Case)以及它们之间的关系构成的用于描述系统功能的视图,是被称为参与者的外部用户所能观察到的系统功能的模型图。
用例图常在需求分析阶段使用。
用例图的组成元素:参与者(角色)、用例以及各元素之间的关系。
-
参与者(Actor)
是与主体系统交互的外部实体。参与者可以是系统外部的人、子系统、其它系统等。参与者间的主要关系是泛化。泛化关系是一般和特殊(具体)之间的关系。
-
用例
是参与者可以感受到的系统服务或功能单元。
2.2.2、使用说明
部门领导和助理是一个一般参与者,领导具有审批功能(抽象父用例),审批的子用例又包括请假审批、晋升审批,是审批的一种泛化关系。
2.3、对象图
2.3.1、定义及概述
对象图用于描述某一时刻的一组对象及它们之间的关系。
对象图的组成元素:对象、链。
2.3.2、使用说明
前面,我们介绍了类图。类图是站在类的角度,是对类的构成属性和行为等的概述。而对象图是类的具体实例,用来表达各个对象在某一时刻的状态。
例如:
2.4、组件图
2.4.1、定义及概述
又称构件图,是UML中描述一个系统中的物理方面的图形,它是用来描述构成系统的各个组件、组件提供的接口与需求的接口、端口以及它们之间关系的图。
组件图的组成元素:组件、接口及其它们之间的关系三种元素。
什么是组件?
组件(Component)是定义了良好接口的、可重用的、可替代的物理实现单元。组件隐藏了内部实现的细节,可以是一组代码的集合,也可以是一个脚本。其实现在组件的概念对我们来说并不陌生,对于后端来说我们封装的一组公共方法,对于前端来说,我们集成的一个可重用的控件等都是组件。
2.4.1、使用说明
-
组件
在UML1.x中,一个标准的组件使用如下图形表示:
在UML2.x中,一个标准的组件使用如下图形表示:
也可以使用类似类的矩形框加上构造型<>来表示组件:
-
接口
组件中接口主要分为:导出接口、导入接口。
例如:
等价于
导出接口用圆圈表示,上图意思是userServers提供了IUserServer接口的实现。
导入接口用半圆表示,上图意思是userServers需要依赖于IOrderServices接口。
2.5、部署图
2.5.1、定义及概述
部署图(Deployment Diagram)用于描述系统硬件的物理拓扑结构以及在相关节点上运行的软件分别节点。
部署图的组成元素:节点(node)和节点之间的关系(relationship)。
2.5.1、使用说明
例如:
2.6、活动图
2.6.1、定义及概述
描述了具体业务用例的实现流程。流程图是面向过程的,而活动图是面向对象的,它能够表现出并发活动的情形。
活动图的组成元素:对象流、(动作/活动)状态、组合活动、分支、泳道等。
2.6.1、使用说明
类似于工作流程图。也可以做跨职能的流程图。
2.7、状态机图
2.7.1、定义及概述
状态机图(State Machine Diagram)是系统分析中常用的一种工具,它用于描述一个对象在其生命周期内所经历的各种状态,以及状态之间的转移、引发转移的事件或状态转移的活动。
状态机的组成元素:状态机由状态、转移、事件和动作等组成。
状态图与活动图的区别?
状态图 = 状态+迁移;
活动图 = 活动+动作+活动边+活动节点。
活动图是一种特殊的状态图,用于为一个对象在其生命周期中的行为建模,当我们要描述一个对象的生命周期的时候,状态机图往往更合适。
2.7.1、使用说明
2.8、时序图
2.8.1、定义及概述
又称顺序图,它关注对象之间消息传送的时间顺序,它是描述对象行为的一种交互视图。
时序图组成元素:主要包括对象、生命线、消息和激活等元素。
2.8.1、使用说明
组成元素 | 解释 | 用例 |
---|---|---|
对象 | 对象是类的一个实例 | |
生命线 | 代表了一次交互中的一个参与对象在一段时间内的存在 | |
消息 | 一个对象(发送者)向另一个对象(接收者)发送信号 | |
激活 | 一个对象执行一个动作所经历的时间段 | |
删除 | 位于对象生命线的低端,表示删除对象 |
例如:
2.9、通讯(协作)图
2.9.1、定义及概述
通讯图,在UML1.x中叫协作图,主要描述用例在实现过程中参与的对象以及对象之间的交互消息,它不强调时间。
通讯(协作)图组成元素:对象(Object)、消息(Message)和链(Link)三个元素构成。
2.9.2、使用说明
例如:
通讯图不强调时间,但是双方之间有交互。
2.10、包图
2.10.1、定义及概述
包是对UML中各模型元素进行组织管理的一种机制,它把概念上相似、有关联的模型元素组织到一个包中,形成具有各种功能或用途的模块,并可以控制包中元素的可见性,以方便人们更好的理解复杂的系统。
包图组成元素:包与包之间的关系。
包之间的关系主要有依赖关系和泛化关系。依赖使用虚线箭头表示,箭头由依赖包指向被依赖的包。泛化使用实线空心箭头表示。
依赖关系又分为:
<<use>>
:表示使用依赖;
<<merge>>
:表示合并
<<access>>
:表示私有引入
<<import>>
:表示公共引入
2.10.1、使用说明
例如:
2.11、组合结构图
2.11.1、定义及概述
组合结构图使用部件、端口和连接器来描述结构化类元的内部结构以及他们之间的关系。一般用来表示系统中逻辑上的"组合结构"。
组合结构图组成元素:端口、组合片段(部件)、类、接口、包、组件连接器等元素。
2.11.1、使用说明
可以是一系列结构化类元的组合。
2.12、定时图
2.12.1、定义及概述
计时图侧重于图中沿时间线更改的消息或条件的计时或持续时间。
定时图组成元素:两个生命线、状态不变量、消息、持续时间观察和约束以及时间观察和约束。
2.12.1、使用说明
关于定时图的用法,在UML2.x中新增的,目前大多数的软件还没有更新定时图。有兴趣的可以自己去了解一下。
2.13、交互概览图
2.13.1、定义及概述
交互概览图与活动图类似,但是它的节点是交互图。提供了控制流的概述以及选择交互引用。