UML几种图例介绍

发布时间 2023-12-07 18:45:04作者: 橘子味芬达水

九种常见UML图

 

UML图中类之间的关系:依赖,泛化,关联,聚合,组合,实现

类与类图
1) 类(Class)封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性、操作、关系的对象集合的总称。
2) 在系统中,每个类具有一定的职责,职责指的是类所担任的任务,即类要完成什么样的功能,要承担什么样的义务。一个类可以有多种职责,设计得好的类一般只有一种职责,在定义类的时候,将类的职责分解成为类的属性和操作(即方法)。
3) 类的属性即类的数据职责,类的操作即类的行为职责。

依赖关系(Dependence):假设A类的变化引起了B类的变化,则说名B类依赖于A类。

•  依赖关系(Dependency) 是一种使用关系,特定事物的改变有可能会影响到使用该事物的其他事物,在需要表示一个事物使用另一个事物时使用依赖关系。大多数情况下,依       赖关系体现在某个类的方法使用另一个类的对象作为参数。

泛化关系(Generalization):A是B和C的父类,B,C具有公共类(父类)A,说明A是B,C的一般化(概括,也称泛化)

 

•  泛化关系(Generalization)也就是继承关系,也称为“is-a-kind-of”关系,泛化关系用于描述父类与子类之间的关系,父类又称作基类或超类,子类又称作派生类。在UML中,泛      化关系用带空心三角形的直线来表示。
•  在代码实现时,使用面向对象的继承机制来实现泛化关系,如在Java语言中使用extends关键字、在C++/C#中使用冒号“:”来实现。 

在UML当中,对泛化关系有三个要求:

1、子类与父类应该完全一致,父类所具有的属性、操作,子类应该都有;

2、子类中除了与父类一致的信息以外,还包括额外的信息;

3、可以使用父类的实例的地方,也可以使用子类的实例;

三、关联关系(Association)

 

关联关系(Association):类之间的联系,如客户和订单,每个订单对应特定的客户,每个客户对应一些特定的订单,再如篮球队员与球队之间的关联(下图所示)。

 

其中,关联两边的"employee"和“employer”标示了两者之间的关系,而数字表示两者的关系的限制,是关联两者之间的多重性。通常有“*”(表示所有,不限),“1”(表示有且仅有一个),“0...”(表示0个或者多个),“0,1”(表示0个或者一个),“n...m”(表示n到m个都可以),“m...*”(表示至少m个)。
 
•  关联关系(Association) 是类与类之间最常用的一种关系,它是一种结构化关系,用于表示一类对象与另一类对象之间有联系。
•  在UML类图中,用实线连接有关联的对象所对应的类,在使用Java、C#和C++等编程语言实现关联关系时,通常将一个类的对象作为另一个类的属性。
•  在使用类图表示关联关系时可以在关联线上标注角色名。
 

 四、聚合关系(Aggregation)

 

聚合关系(Aggregation):表示的是整体和部分的关系,整体与部分 可以分开.

 

•  聚合关系(Aggregation) 表示一个整体与部分的关系。通常在定义一个整体类后,再去分析这个整体类的组成结构,从而找出一些成员类,该整体类和成员类之间就形成了聚合   关系。
•  在聚合关系中,成员类是整体类的一部分,即成员对象是整体对象的一部分,但是成员对象可以脱离整体对象独立存在。在UML中,聚合关系用带空心菱形的直线表示。 

如:电话机包括一个话筒

       电脑包括键盘、显示器,一台电脑可以和多个键盘、多个显示器搭配,确定键盘和显示器是可以和主机分开的,主机可以选择其他的键盘、显示器组成电脑;

 

五、组合关系(Composition)

组合关系(Composition):也是整体与部分的关系,但是整体与部分不可以分开.

 

•  组合关系(Composition)也表示类之间整体和部分的关系,但是组合关系中部分和整体具有统一的生存期。一旦整体对象不存在,部分对象也将不存在,部分对象与整体对象之    间具有同生共死的关系。
•  在组合关系中,成员类是整体类的一部分,而且整体类可以控制成员类的生命周期,即成员类的存在依赖于整体类。在UML中,组合关系用带实心菱形的直线表示。
 

 六、实现关系(Implementation)

 

实现关系(Implementation):是用来规定接口和实线接口的类或者构建结构的关系,接口是操作的集合,而这些操作就用于规定类或者构建的一种服务。

 

• 接口之间也可以有与类之间关系类似的继承关系和依赖关系,但是接口和类之间还存在一种实现关系(Realization),在这种关系中,类实现了接口,类中的操作实现了接口中所     声明的操作。在UML中,类与接口之间的实现关系用带空心三角形的虚线来表示。

作为一种建模语言,UML的定义包括UML语义和UML表示法两个部分。

l UML语义:描述基于UML的精确元模型定义。

l UML表示法:定义UML符号的表示法,为开发者或开发工具使用这些图形符号和文本语法为系统建模提供了标准。这些图形符号和文字所表达的是应用级的模型,在语义上它是UML元模型的实例。

标准建模语言UML可以由下列5类图来定义。

l 用例图:从用户角度描述系统功能,并指出各功能的操作者。

l 静态图:包括类图和对象图。类图描述系统中类的静态结构,不仅定义系统中的类,表示类之间的联系,如关联、依赖、聚合等,也包括类的属性和操作,类图描述的是一种静态关系,在系统的整个生命周期都是有效的。对象图是类图的实例,几乎使用与类图完全相同的标识。一个对象图是类图的一个实例。由于对象存在生命周期,因此对象图只能在系统某一时间段存在。

l 行为图:描述系统的动态模型和组成对象间的交互关系,包括状态图和活动图。状态图描述类的对象所有可能的状态以及事件发生时状态的转移条件,状态图是对类图的补充,活动图描述满足用例要求所要进行的活动以及活动间的约束关系,有利于识别并进行活动。

l 交互图:描述对象间的交互关系,包括时序图和协作图。时序图显示对象之间的动态合作关系,它强调对象之间消息发送的顺序,同时显示对象之间的交互;协作图描述对象间的协作关系,协作图跟时序图相似,显示对象间的动态合作关系。除显示信息交换外,协作图还显示对象以及它们之间的关系。如果强调时间和顺序,则使用时序图;如果强调上下级关系,则选择协作图。

l 实现图:包括组件图和部署图。组件图描述代码部件的物理结构及各部件之间的依赖关系,组件图有助于分析和理解部件之间的相互影响程度;部署图定义系统中软硬件的物理体系结构。

采用UML来设计系统时,第一步是描述需求;第二步根据需求建立系统的静态模型,以构造系统的结构;第三步是描述系统的行为。其中在第一步与第二步中所建立的模型都是静态的,包括用例图、类图、对象图、组件图和部署图等5种图形,是标准建模语言UML的静态建模机制。其中第三步中所建立的模型或者可以执行,或者表示执行时的时序状态或交互关系。它包括状态图、活动图、时序图和协作图等4种图形,是标准建模语言UML的动态建模机制。

 

首先对UML中的各个图的功用做一个简单介绍:

1、用例图
    描述角色以及角色与用例之间的连接关系。说明的是谁要使用系统,以及他们使用该系统可以做些什么。一个用例图包含了多个模型元素,如系统、参与者和用例,并且显示了这些元素之间的各种关系,如泛化、关联和依赖。
2、类图
    类图是描述系统中的类,以及各个类之间的关系的静态视图。能够让我们在正确编写代码以前对系统有一个全面的认识。类图是一种模型类型,确切的说,是一种静态模型类型。
3、对象图
    与类图极为相似,它是类图的实例,对象图显示类的多个对象实例,而不是实际的类。它描述的不是类之间的关系,而是对象之间的关系。
4、活动图
    描述用例要求所要进行的活动,以及活动间的约束关系,有利于识别并行活动。能够演示出系统中哪些地方存在功能,以及这些功能和系统中其他组件的功能如何共同满足前面使用用例图建模的商务需求。
5、状态图
    描述类的对象所有可能的状态,以及事件发生时状态的转移条件。可以捕获对象、子系统和系统的生命周期。他们可以告知一个对象可以拥有的状态,并且事件(如消息的接收、时间的流逝、错误、条件变为真等)会怎么随着时间的推移来影响这些状态。一个状态图应该连接到所有具有清晰的可标识状态和复杂行为的类;该图可以确定类的行为,以及该行为如何根据当前的状态变化,也可以展示哪些事件将会改变类的对象的状态。状态图是对类图的补充。
6、序列图(顺序图)
    序列图是用来显示你的参与者如何以一系列顺序的步骤与系统的对象交互的模型。顺序图可以用来展示对象之间是如何进行交互的。顺序图将显示的重点放在消息序列上,即强调消息是如何在对象之间被发送和接收的。
7、协作图

    和序列图相似,显示对象间的动态合作关系。可以看成是类图和顺序图的交集,协作图建模对象或者角色,以及它们彼此之间是如何通信的。如果强调时间和顺序,则使用序列图;如果强调上下级关系,则选择协作图;这两种图合称为交互图。

8、构件图 (组件图)
    描述代码构件的物理结构以及各种构建之间的依赖关系。用来建模软件的组件及其相互之间的关系,这些图由构件标记符和构件之间的关系构成。在组件图中,构件时软件单个组成部分,它可以是一个文件,产品、可执行文件和脚本等。
9、部署图 (配置图)
    是用来建模系统的物理部署。例如计算机和设备,以及它们之间是如何连接的。部署图的使用者是开发人员、系统集成人员和测试人员。
几种图的区别:

一:这九种模型图各有侧重,

1:用例图侧重描述用户需求,

2:类图侧重描述系统具体实现;

二:描述的方面都不相同,

1:类图描述的是系统的结构,

2:序列图描述的是系统的行为;

三:抽象的层次也不同,

1:构件图描述系统的模块结构,抽象层次较高,

2:类图是描述具体模块的结构,抽象层次一般,

3:对象图描述了具体的模块实现,抽象层次较低。

 

在有的文献书籍中,将这九种模型图分为三大类:

结构分类、动态行为和模型管理:

1:结构分类包括用例图、类图、对象图、构件图和部署图,

2:动态行为包括状态图、活动图、顺序图和协作图,

3:模型管理则包含类图。

 

 

画图说明

UML(统一建模语言):是面向对象的可视化建模的一种语言。是数据库设计过程中,在E-R图(实体-联系图)的设计后的进一步建模。
UML中有3种构造块:事物、关系和图,事物是对模型中最具有代表性的成分的抽象;关系是把事物结合在一起;图聚集了相关的的事物。具体关系图标如下:
 

说明:
构件事物是名词,是模型的静态部分。
行为事物是动态部分,表示行为。
分组事物是组织部分。
注释事物是解释部分。
依赖:一个事物变化会引起另一个事物变化。
聚集:特殊的关联,描述整体与部分的组合关系。
泛化:是一种特殊与一般的关系,如子元素(特殊)与父元素(一般),箭头指向父元素。
实现:类元之间的关系,其中一个类元指定了由另一个类元保证执行的契约。一般用在接口和实现他们的类之间或用例和实现它们的协作之间。
UML提供9种视图:类图、对象图,用例图,序列图、协作图,状态图、活动图,构件图和部署图。

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

下面具体说明:

1.类图:描述一组对象、接口、协作等事物之间的关系。如下图(摘自网络):
 
注:#表示protected,+表示Public,-表示private


2.对象图:描述一组对象之间的关系,是具有具体属性值和行为的一个具体事物,其是类图中所建事物实例的静态快照,其与类图的主要区别是一个是抽象的,而对象图是具体的。如下图(摘自网络):
 

3.用例图:描述一组用例、参与者以及它们之间的关系,其展示的是该系统在它的外面环境中所提供的外部可见服务。如下图(摘自网络):
 

4.交互图:包括序列图(顺序图)和协作图,两者对应,顺序图是强调消息时间顺序,有对象生命线和控制焦点。协作图是强调接收和发送消息的对象的结构组织,有路径和顺序号。如下图(摘自网络):
序列图:
 
协作图:
 

5.状态图:展示了一个状态机,由状态、转换、事件和活动组成。强调事件行为的顺序。如下图(摘自网络):
 
6.活动图:是一种特殊的状态图,实现一个活动到另一个活动的流程。如下图(摘自网络):
 
7.构件图和部署图:构件图展示一组构件之间的组织和依赖关系,并以全局的模型展示出来。部署图是构件的配置及描述系统如何在硬件上部署。如下图(摘自网络):

概述

类图(Class Diagram)是面向对象系统建模中最常用和最重要的图,是定义其它图的基础。
类图主要是用来显示系统中的类、接口以及它们之间的静态结构和关系的一种静态模型。
类图不仅用于可视化描述和记录系统的不同方面,也为构建可执行代码的软件应用程序。
类图描述一类的属性和操作,也对系统的约束。被广泛应用于类图的建模的面向对象的系统中,因为它们是唯一的,可以直接映射到面向对象语言的 UML 图。
类图显示集合的类,接口,关联,协作和约束,它也被称为作为结构图。

目的

  1. 分析和设计应用程序的静态视图;
  2. 描述一个系统的责任;
  3. 基地组件图和部署图;
  4. 正向和逆向工程。

示例

类图

车的类图结构为<>,表示车是一个抽象类;
它有两个继承类:小汽车和自行车;它们之间的关系为实现关系,使用带空心箭头的虚线表示;
小汽车为与SUV之间也是继承关系,它们之间的关系为泛化关系,使用带空心箭头的实线表示;
小汽车与发动机之间是组合关系,使用带实心箭头的实线表示;
学生与班级之间是聚合关系,使用带空心箭头的实线表示;
学生与身份证之间为关联关系,使用一根实线表示;
学生上学需要用到自行车,与自行车是一种依赖关系,使用带箭头的虚线表示;

2.对象图

概述

UML 对象图和类图一样反映系统的静态过程,但它是从实际的或原型化的情景来表达的。
UML 对象图显示某时刻对象和对象之间的关系。一个UML对象图可看成一个类图的特殊用例,实例和类可在其中显示。
UML 对象图是类图的实例,几乎使用与类图完全相同的标识。
由于对象存在生命周期,因此UML对象图只能在系统某一时间段存在。

目的

对象图的目的与类图类似。
不同的是,一个类图代表一个抽象的模型,包括类和它们之间的关系。但是,由于对象存在生命周期,因此UML对象图只能在系统某一时间段存在。
这意味着对象图是更接近实际的系统行为。目的是在一个特定的时刻捕捉到静态的系统视图。

对象图的目的概述如下:
正向和逆向工程;
一个系统的对象间的关系;
一个交互的静态视图;
了解对象的行为和他们的关系从实用的角度来看。

示例

对象图

上面的对象图代表订单管理系统,顾客在一个特定的时间下单。它具有顾客、订单、特殊订单和一般订单四个对象。现在客户对象(C)是与三个订单对象(O1,O2和O3)。这些订单对象相关联的特殊订单和一般订单对象(S1,S2和N1)。顾客具有以下三个具有不同数目的订单(12,32和40),用于所考虑的特定的时间。

3.组件图

概述

UML 组件图(Component Diagram)又称为构件图,他描述的是在软件系统中遵从并实现一组接口的物理的、可替换的软件模块。
组件图 = 构件(Component)+接口(Interface)+关系(Relationship)+端口(Port)+连接器(Connector)。
UML 组件图给提供了将要建立的系统的高层次的架构视图,这将帮助开发者开始建立实现的路标,并决定关于任务分配及(或)增进需求技能。

目的

组件图是一种特殊的 UML 图。与我们之前讨论的 UML 图表的目的都不同。组件图不描述该系统的功能,但它描述了使用这些功能的组件。
所以从这一点来说,组件图用于可视化在一个系统中的物理组件。这些组件包括库,程序包,文件等。
组件图也被描述为一个静态的实施的系统视图,在一个特定的时刻,静态执行代表组织的组成部分。
一个单一的组件图不能代表整个系统,但图的集合可用来代表整个。
组件图的目的概括如下:
可视化系统的组成部分。
构建的可执行文件,使用正向和反向工程。
描述的组织和组件的关系。

示例

组件图

在购买一件商品时,我们首先是浏览商品,了解商品详情。在商品详细页面上,我们可以看到一个“加入购物车”。可以绘制网上商城组件图,如上图所示:购物车、订单、库存、支付管理组件。

4.部署图

概述

部署图由节点以及节点之间的关系组成。
部署图描述的是系统运行时的结构,展示了硬件的配置及其软件如何部署到网络结构中。
部署图通常用来帮助理解分布式系统,一个系统模型只有一个部署图。
部署图用于可视化的软件组件部署的系统中的物理组件的拓扑结构。
部署图是用来描述一个系统的静态部署视图。

目的

部署图与组件图密切相关,部署图是用来描述软件组件部署的硬件组件;而组件图是用来描述组件和显示了它们是如何在硬件中部署。
UML的设计主要是把重点放在系统的软件构件。但是,这两个图是使用特殊图表专注于软件组件和硬件组件。
所以大多数的 UML 图是用来处理逻辑组件,但把重点放在系统的硬件拓扑部署图。
以下是部署图的目的描述:
可视化系统的硬件拓扑。
描述用于部署软件组件的硬件组件。
描述运行时处理节点。

示例

部署图

5.用例图

概述

用例图捕捉了模拟系统中的动态行为,并且描述了用户、需求以及系统功能单元之间的关系。
用例图展示了一个外部用户能够观察到的系统功能模型图。
用例图由主角,用例和它们之间的关系组成。

目的

用例图的目的是捕捉到一个系统的动态方面。
用例图是用来收集系统的要求,包括内部和外部的影响。这些要求大多是设计要求。所以,分析一个系统时要收集其功能用例和确定参与者。
简单来说,用例图的目的如下:
用例图用来收集系统的要求。
用例图用于获取系统的外观图。
用例图识别外部和内部因素影响系统。
用例图显示要求之间的相互作用是参与者。

示例

用例图

6.序列图

概述

序列图亦称为时序图或循序图或顺序图,是一种UML行为图。它通过描写叙述对象之间发送消息的时间顺序,显示多个对象之间的动态协作。它能够表示用例的行为顺序,当运行一个用例行为时,时序图中的每条消息响应了一个类操作或状态机中引起转换的触发事件。
序列图展示对象之间的交互,这些交互是指在场景或用例的时间流中发生的,序列图属于动态建模。
序列图的重点在消息序列上,也就是说,描写叙述消息是怎样在对象间发送和接收的,表示对象之间传送消息的时间顺序。
序列图的组成元素:对象、生命线、激活、消息。

目的

  1. 细化用例的表达。将用例所描述的需求与功能转化为更加正式、层次更加分明的细化表达。
  2. 有效地描述类职责的分配方式。根据顺序图中各对象之间的交互关系和发送的消息,来进一步明确对象所属类的职责。
  3. 丰富系统的使用语境的逻辑表达。系统的使用语境即为系统可能的使用方式和使用环境。

示例

ATM机取款的需求描述如下:
用户通过ATM机,插入银行卡。系统提示输入密码,用户输入密码。系统检查密码是否正确,密码正确用户选择取款。系统提示输入取款金额。用户输入金额,系统判断其合法性。在获取用户输入金额后,系统开始事物处理,减少账户金额,输出相应现金。序列图如下图所示:

序列图

7.协作图

概述

协作图是动态图的另一种表现形式,强调参加交互的各对象结构的信息。协作图是一种类图,包含类元角色和关联角色,而不仅仅是类元和关联。协作图强调参加交互的各对象的组织。
序列图的组成元素:对象、链接、消息。

目的

协作图中对象之间的消息传递来反映具体的使用语境的逻辑表达,表示的是系统的一个行为,消息编号对应了程序中嵌套调用的结构和信号传递过程,显示的对象之间的一种关系。协作图常用于过程的详细设计。

示例

ATM机取现金100元的需求,协作图如下图所示:

协作图

8.状态图

概述

UML状态图是图表本身的名称,主要用于描述对象具有的各种状态、状态之间的转换过程以及触发状态转换的各种事件和条件。
UML状态图描述了一个状态机,可以被定义为一台机器,它定义了一个对象,这些状态控制外部或内部事件的不同状态。
状态机由状态、转换、事件、活动和动作五部分组成。

  • 状态:状态指的是对象在其生命周期中的一种状况,处于某个特定状态中的对象必然会满足某些条件、执行某些动作或者是等待某些事件。一个状态的生命周期是一个有限的时间阶段。
  • 转换:转换指的是两个不同状态之间的一种关系,表明对象在第一个状态中执行一定的动作,并且在满足某个特定条件下由某个事件触发进入第二个状态。
  • 事件:事件指的是发生在时间和空间上的对状态机来讲有意义的那些事情。事件通常会引起状态的变迁,促使状态机从一种状态切换到另一种状态,如信号、对象额度创建和销毁等。
  • 活动:活动指的是状态机中进行的非原子操作。
  • 动作:动作指的是状态机中可以执行的哪些原子操作。所谓原子操作,指的是他们在运行的过程中不能被其他消息中断,必须一直执行下去,以至最终导致状态的变更或者返回一个值。

目的

UML状态图可以捕获对象、子系统和系统的生命周期,可以告知一个对象可以拥有的状态,并且事件(如消息的接收,时间的流逝、错误、条件为真等)会怎样随着时间的推移来影响这些状态。一个状态图应该连接到所有具有清晰的可标志状态和复杂行为的类;该图可以确定类的行为以及该行为如何根据当前的状态而变化,也可以展示哪些事件将会改变类的对象的状态。状态图主要是为了模拟响应系统。
以下是使用状态图的主要目的:

  • 为了模拟系统的动态环节。
  • 反应系统模型生命周期。
  • 一个对象来描述不同的状态,在其生命周期的时间。
  • 定义一个状态机模型状态的对象。

示例

状态图

9.活动图

概述

UML活动图是 UML 的动态模型的一种图形,一般用来描述相关用例图。
UML活动图描述满足用例要求所要进行的活动以及活动间的约束关系,有利于识别并行活动。
UML活动图是一种特殊的状态图,它对于系统的功能建模特别重要,强调对象间的控制流程。
UML活动图是一种表述过程基理、业务过程以及工作流的技术。它可以用来对业务过程、工作流建模,也可以对用例实现甚至是程序实现来建模。
UML活动图基本上是代表流程形成一个活动到另一个活动的流程图。活动可以被描述为一个系统的操作。

目的

UML活动图能够捕捉到该系统的动态行为,UML中其它的四个图是用来显示从一个对象到另一个消息流,但活动图是用来显示消息流从一个活动到另一个活动图。
活动图不仅用于可视化系统的动态性质,也可用于通过使用正向和逆向工程技术来构建可执行的系统。唯一缺少的东西在活动图的消息部分。
它并不显示任何消息流程从一个活动到另一个,活动图是一段时间视为流程图。虽然图中看起来像一个流程图,但事实并非如此。它显示不同的流程,如并行,分支,并发单。
以下是 UML 活动图目的描述:

  • 绘制活动流程系统。
  • 描述的顺序从一个活动到另一个。
  • 描述系统并行,分支,并发流。

示例