UML中九种图以及图中元素所代表的含义详解

发布时间 2023-12-07 15:52:21作者: 十乂

UML是一种建模语言,它用于描述系统的结构和行为。在UML1.4中提供了九种常用的图,如用例图、类图、对象图、状态图、活动图、时序图、协作图、组件图以及配置图 。

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

1. 用例图的含义
  由参与者(Actor)、用例(Use Case)以及它们之间的关系构成的用于描述系统功能的动态视图称为用例图。要在用例图上显示某个用例,可绘制一个椭圆,然后将用例的名称放在椭圆的中心或椭圆下面的中间位置。
  要在用例图上绘制一个参与者(表示一个系统用户),可绘制一个人形符号。参与者和用例之间的关系使用带箭头或者不带箭头的线段来描述,箭头表示在这一关系中哪一方是对话的主动发起者,箭头所指方是对话的被动接受者。在用例建模中,为了更加清楚的描述用例或者参与者,会使用到注释。

2. 用例图的作用

  用例图是需求分析中的产物,主要作用是描述参与者和用例之间的关系,帮助开发人员可视化的了解系统的功能。借助于用例图,系统用户、系统分析人员、系统设计人员、领域专家能够以可视化的方式对问题进行探讨,减少了大量交流上的障碍,便于对问题达成共识。
  用例图可视化地表达了系统的需求,具有直观、规范等优点,克服了纯文字性说明的不足。
  用例方法是完全从外部来定义系统功能,它把需求和设计完全的分离开来。我们不用关心系统内部是如何完成各种功能的,系统对于我们来说就是一个黑箱子。

3.用例图的构成要素

1. 参与者

  参与者(Actor)是指存在于系统外部并直接与系统进行交互的人、系统、子系统或类的外部实体的抽象。
每个参与者可以参与一个或多个用例,每个用例也可以有一个或多个参与者。
  在用例图中使用一个人形图标来表示参与者,参与者的名字写在人形图标下面。

2. 参与者间的的关系

  由于参与者实质上也是类,所以它拥有与类相同的关系描述,即参与者与参与者之间主要是泛化关系(或称为“继承”关系)。
泛化关系的含义是把某些参与者的共同行为提取出来表示成通用行为,并描述成超类。泛化关系表示的是参与者之间的一般/特殊关系,在UML图中,使用带空心三角箭头的实线表示泛化关系。

3. 系统边界

  在项目开发过程中,边界是一个非常重要的概念。这里说的系统边界是指系统与系统之间的界限。通常我们所说的系统可以认为是由一系列的相互作用的元素形成的具有特定功能的有机整体。
  系统同时又是相对的,一个系统本身又可以是另一个更大系统的组成部分,因此,系统与系统之间需要使用系统边界进行区分开来。我们把系统边界以外的同系统相关联的其他部分,称之为系统环境。

4.用例之间的关系
1. 包含<include>

  包含关系指用例可以简单地包含其他用例具有的行为,并把它所包含的用例行为作为自身行为的一部分。在UML中,包含关系是通过带箭头的虚线段加<>字样来表示,箭头由基础用例(Base)指向被包含用例(Inclusion)。在处理包含关系时,具体的做法就是把几个用例的公共部分单独的抽象出来成为一个新的用例。主要有两种情况需要用到包含关系:第一,多个用例用到同一段的行为,则可以把这段共同的行为单独抽 象成为一个用例,然后让其他用例来包含这一用例。第二,某一个用例的功能过多、事件流过于复杂时,我们也可以把某一段事件流抽象成为一个被包含的用例,以达到简化描述的目的。

2. 扩展<extend>

       在一定条件下,把新的行为加入到已有的用例中,获得的新用例叫做扩展用例(Extension),原有的用例叫做基础用例(Base),从扩展用例到基础用例的关系就是扩展关系。一个基础用例可以拥有一个或者多个扩展用例,这些扩展用例可以一起使用。

3.泛化<generalization>

      用例的泛化指的是一个父用例可以被特化形成多个子用例,而父用例和子用例之间的关系就是泛化关系。在用例的泛化关系中,子用例继承了父用例所有的结构、行为和关系,子用例是父用例的一种特殊形式。子用例还可以添加、覆盖、改变继承的行为。在UML中,用例的泛化关系通过一个三角箭头从子用例指向父用例来表示。

 二、类图:描述系统中的类以及类之间的关系。说明系统中有哪些类,这些类之间的关系是什么。
1.类和对象
对象是描述客观世界中某个具体的实体,而类是对一类具有相同特征的对象的描述。对象是类的实例。在UML中类可表示为一个划分为三个格子的长方形,第一个格子包含类名,中间的格子包含类的属性,最后个格子包含类的操作。
2.类之间的关系和表示方法
依赖(Dependency):表示一种单向的关系,其中一个元素(提供者)的变化会影响另一个元素(接受者)。在类图中,依赖关系用一条带有虚线箭头的线来表示,箭头从依赖类指向被依赖类。关联(Association):关联表示两个类之间存在某种语义上的联系。例如,一个人为一家公司工作,一个人和一辆车有关等。在类图中,关联关系用一条实线来表示。
聚合(Aggregation):聚合是关联关系的特例,它表示整体与部分的关系。例如,一个班级包含多个学生,一个公司有多个部门等。在类图中,聚合关系用带有空心菱形头的实线来表示,菱形头指向整体。
组合(Composition):组合也是聚合关系的特例,但它表示更强的整体与部分的关系,即部分无法独立存在。例如,一个人有一个大脑,一个公司有一台服务器等。在UML类图中,组合关系用带有实心菱形头的实线来表示,菱形头指向整体。
泛化(Generalization):泛化是一种特殊/一般关系,特殊元素(子元素)继承一般元素(父元素)的属性和方法。在类图中,泛化关系用一条带有空心箭头的实线来表示,箭头从子类指向父类。
实现(Realization):实现关系是接口与类之间的关系,表明类实现了接口的所有属性和方法。在UML类图中,实现关系用一条带有实心箭头的实线来表示,箭头从接口指向实现类。
三、对象图:描述系统中的对象以及对象之间的关系。说明系统中有哪些对象,这些对象之间的关系是什么。
1.对象图的概念

对象图是表示在某一时刻一组对象以及它们之间关系的图形。对于复杂的数据结构,有时候很难对其进行抽象成类表达之间的关系,一般就会使用对象图。说到对象图,就不得不提到UML的另一种图形——类图,两者几乎使用一套完全相同的标识。不同在于对象图显示类的多个对象实例,而不是实际的类。一个对象图是类图的一个实例。由于对象存在生命周期,因此对象图只能在系统某一时间段存在(这一点从定义上也不难看出)。

2.对象图的组成

对象图中的建模元素主要有对象和链。对象是类的实例,是一个封装了状态和行为的实体。对象通过其类型、名称和状态区别于其他对象而存在。链是类之间的关联关系的实例,是两个或多个对象之间的独立连接。因此,链在对象图中的作用类似于关联关系在类图中的作用。

四、状态图:描述系统中的状态以及状态之间的关系。说明系统中有哪些状态,这些状态之间的关系是什么。

UML状态图主要由五种元素组成,分别是状态、转换、事件、动作和活动。状态:表示对象的生命周期中的一种条件/情况,有初态和终态之分转换:表示两种状态间的一种关系。事件:表示在某一时间与空间下所发生的有意义的事情。动作:表示一个可执行的原子操作,是UML能够表达的最小计算单元。活动:表示状态机中的非原子执行,一般由一系列动作组成。

五、活动图:描述系统中的活动以及活动之间的关系。说明系统中有哪些活动,这些活动之间的关系是什么。

一、基本概念
1. 活动节点
用来表示一个活动。
2. 初始节点和活动终点
实心圆表示初始节点(只有一个),圆圈内加一个实心圆来表示活动终点(可有多个)。
3. 转换
一条带箭头的直线来表示。 一旦前一个活动结束马上转到下一个活动(无触发转换)。
4. 分支与监护条件
分支是用菱形表示的,它有一个进入转换(箭头从外指向分支符号),一个或多个离开转换(箭头从分支符号指向外)。而每个离开转换上都会有一个监护条件,用来表示满足什么条件的时候执行该转换。
5. 分叉与汇合
分叉用于将动作流分为两个或者多个并发运行的分支,而汇合则用于同步这些并发分支,以达到共同完成一项事务的目的。
分叉可以用来描述并发线程,每个分叉可以有一个输入转换和两个或多个输出转换,每个转换都可以是独立的控制流。
汇合代表两个或多个并发控制流同步发生,当所有的控制流都达到汇合点后,控制才能继续往下进行。

六、时序图:描述系统中的时间顺序以及时间之间的关系。说明系统中有哪些时间点,这些时间点之间的关系是什么。

1.时序图的概念
时序图定义 : 描述了对象之间传递消息的时间顺序, 用来表示用例中的行为顺序, 是强调消息时间顺序的交互图;
时序图描述的事物: 时序图描述系统中类和类之间的交互, 将这些交互建模成消息交换, 时序图描述了类以及类之间的交换以完成的期望行为的消息, 时序图中每条消息都代表了类的一个操作 或者 引起状态机改变的触发事件;
时序图表示 : 参与交互的对象在时序图顶端水平排列, 每个对象的底端绘制了一条垂直虚线, 对象A像对象B发送消息, 用一条带箭头的实线表示, 该实线起始于对象A底部的虚线, 终止于对象B底部的虚线; 实线箭头水平放置, 越靠近顶端越早被发送.
时序图轨迹 : 时序图提供了随时间推移的, 清晰的 可视化的轨迹;
2. 时序图组成
时序图组成 : 时序图包括四个元素 对象(Object), 生命线(Lifeline), 激活(Activation), 消息(Message);
(1) 对象(Object)
对象 : 时序图中的对象在交互中扮演的角色就是对象;
对象的符号 : 时序图中的对象与对象图中的表示方法一样, 使用矩形将对象名称包含起来, 并且对象名称下有下划线;
对象创建时机 : 对象可以在交互开始的时候创建, 也可以在交互过程中进行创建;
– 处于顶部 : 如果对象的位置在时序图顶部, 说明在交互开始的时候对象就已经存在了;
– 不在顶部 : 如果对象的位置不在顶部, 那么对象在交互过程中创建的;
(2) 生命线(Lifeline)
生命线 : 生命线是一条垂直的虚线, 这条虚线表示对象的存在, 在时序图中, 每个对象的底部都有生命线;
生命线作用 : 生命线是一个时间线, 从时序图顶部一直到底部都存在, 其长度取决于交互的时间;
对象的生命线 : 对象与生命线结合在一起就是对象的生命线, 这个概念包含对象图标 以及 对象下面的生命线图标 如上图;
(3) 激活(Activation)
激活(Activation) : 代表时序图中对象执行一项操作的时期, 激活期可以理解为语义中 {} 中的内容, 表示该对象被占用以完成某个任务;
去激活(Deactivation) : 指对象处于空闲状态, 在等待消息激活这个对象;
激活的表示 : 当对象处于激活时期, 生命线可以拓宽为矩形, 这个矩形条成为激活条;
激活去激活的时机 :
– 激活 : 对象激活是在激活条的顶部激活;
– 去激活 : 激活条的底部去激活, 通常发生在一个消息离开对象生命线;
(4) 消息
消息概念 : 定义 交互 和 协作 中 交换信息 的类, 对 对象之间的 通信内容 建模;
消息动作 :
– 动作种类 : 消息允许在实体间传递信息 (传递参数), 允许实体请求其它服务, 对象之间通过 发送 和 接收 消息 进行通信;
– 产生结果 : 消息可以触发操作, 唤起信号, 或使目标对象创建 或 销毁;
消息的异步和同步通信 :
– 异步通信 : 消息是信号的时候, 发送信号之后, 等待对方触发相应方法, 这是明确的 命名的 对象间的异步通信;
– 同步通信 : 直接调用对象的方法, 执行方法返回结果, 这种具有返回控制机制的操作是同步通信;
时序图和协作图中消息的区别 : 时序图中的消息强调顺序, 协作图中的消息强调交换消息的对象间的关系;

七、协作图:描述系统中的对象之间的通信以及通信之间的关系。说明系统中有哪些对象之间需要进行通信,这些通信之间的关系是什么。
八、组件图:描述系统中的组件以及组件之间的关系。说明系统中有哪些组件,这些组件之间的关系是什么。
九、配置图:描述系统中的配置以及配置之间的关系。说明系统中有哪些配置项,这些配置项之间的关系是什么。