带你认识UML

Posted 艾曼爷爷

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带你认识UML相关的知识,希望对你有一定的参考价值。


艾曼爷爷

光之备忘录

带你认识UML 带你认识UML


这是 艾曼爷爷 的第 2 篇原创



本节是关于UML的总体概述,仅对UML元素做一些简单的说明。你将了解UML的发展历程和特点,并理解什么是UML、UML中的9种图和UML中的关系。

1.什么是UML

UML(Unified Modeling Language,统一建模语言),是一种能够描述问题、描述解决方案、起到沟通作用的语言。通俗地说,它是一种用文本、图形和符号的集合来描述现实生活中各类事物、活动及其之间关系的语言。

UML是一种很好的工具,可以贯穿软件开发周期中的每一个阶段,它最适于数据建模、业务建模、对象建模和组件建模。作为一种模型语言,UML使开发人员专注于建立产品的模型和结构,而不是选用什么程序语言和算法实现。当模型建立之后,该模型可以被UML工具转化成指定的程序语言代码。

2.UML的发展历程

UML起源于多种面向对象建模方法,它由OMG开发,目前已经成为工业标准。面向对象建模语言最早出现于20世纪70年代中期。从1989年到1994年,其数量从不到十种增加到了五十多种。在众多的建模语言中,语言的创造者努力推崇自己的产品,并在实践中不断完善。但是,OO方法的用户并不了解不同建模语言的优缺点及相互之间的差异,因而很难根据应用特点选择合适的建模语言,于是爆发了一场“方法大战”。

首先,面对众多的建模语言,由于用户没有能力区别不同语言之间的差别,因此很难找到一种比较适合其应用特点的语言;其次,众多的建模语言实际上各有特色;第三,虽然不同的建模语言大多类似,但仍存在某些细微的差别,这极大地妨碍了用户之间的交流。因此,需要统一建模语言。

1994年10月,Grady Booch和Jim Rumbaugh开始致力于这一工作。他们首先将Booch 1993和OMT-2统一起来,并于1995年10月发布了第一个公开版本,称之为统一方法UM 0.8(Unitied Method)。1995年秋,OOSE的创始人Jacobson参与到这一工作中来。经过Booch、Rumbaugh和Jacobson三人的共同努力,于1996年6月和10月分别发布了两个新的版本,即UML 0.9和UML 0.91,并将UM重新命名为UML(Unified Modeling Language)。

在美国,截止1996年10月,UML获得了工业界、科技界和应用界的广泛支持,已有700多个公司表示支持采用UML作为建模语言。1996年底,UML已稳占面向对象技术市场的85%,成为可视化建模语言事实上的工业标准。1997年11月17日,OMG采纳UML 1.1作为基于面向对象技术的标准建模语言。UML代表了面向对象方法的软件开发技术的发展方向,具有巨大的市场前景,也具有重大的经济价值和国防价值。

3.UML的特点

可以将标准建模语言UML的主要特点归结为3点:

(1)UML统一了Booch、OMT和OOSE等方法中的基本概念和符号。

(2)UML吸取了面向对象领域中各种优秀的思想,其中也包括非OO方法的思想。

(3)UML在演变过程中还提出了一些新的概念。

可以认为UML是一种先进实用的标准建模语言,但其中某些概念尚待实践来验证,UML也需要一个进化过程。

4.UML的结构

UML的组成主要有事物、图和关系。事物是UML中重要的组成部分,关系把元素紧密联系在一起,图是很多有相互关系的事物的组合。

(4-1)UML中的事物

UML包含4种事物:构件事物、行为事物、分组事物和注释事物。

(1)构件事物

构件事物是UML模型的静态部分,描述概念或物理元素,它包括以下几种。

①类

类是对一组具有相同属性、相同操作、相同关系和相同语义的对象的抽象。在UML组成中,类是用矩形表示的,它包含三个区域:最上面是类名,中间是类的属性,最下面是类的方法。

②接口

接口是指类或组件提供特定服务的一组操作的集合。因此,一个接口描述了类或组件的对外的可见的动作。一个接口可以实现类或组件的全部动作,也可以只实现一部分动作。在UML中,接口被画成一个圆和它的名字。

③协作

描述一组事物间的相互作用的集合。

④用例

用例描述一系列的动作,这些动作是系统对一个特定角色执行的。在模型中,用例是通过协作来实现的。在UML中,用例画为一个实线椭圆,通常还有它的名字。

⑤构件

也称为组件,是物理上或可替换的系统部分,它实现了一个接口集合。在一个系统中,可以使用不同类型的组件,如COM+或JAVA BEANS。

⑥节点

为了能够有效地对部署的结构进行建模,UML引入了节点这一概念,它可以用来描述实际的PC机、打印机、服务器等软件运行的基础硬件。节点是运行时存在的物理元素,它表示了一种可计算的资源,通常至少有存储空间和处理能力。

此外,参与者、文档库、页表等都是上述基本事物的变体。

(2)行为事物

行为事物是UML模型图的动态部分,它描述跨越空间和时间的行为,主要包括以下两部分。

①交互

实现某功能的一组构件事物之间的消息的集合,涉及消息、动作序列和链接。

②状态机

描述事物或交互在生命周期内响应事件所经历的状态序列。

(3)分组事物

分组事物是UML模型图的组织部分,它描述事物的组织结构,主要由包来实现。包是指把元素编程成组的机制。

(4)注释事物

注释事物是UML模型的解释部分,用来对模型中的元素进行说明和解释。注解是对元素进行约束或解释的简单符号。

(4-2)UML的关系

在UML中有4种关系:依赖、关联、泛化和实现。

(1)依赖(Dependency)

依赖是两个模型元素间的语义关系,其中一个元素(独立事务)的变化会影响另一个元素(依赖事务)的语义。在图形中,依赖用一条可能有方向的虚线表示,偶尔在其上还带有一个标记,如图1.1所示。

带你认识UML

图1.1 依赖

(2)关联(Association)

关联指明一个对象与另一个对象之间的关系。在图形中,关联用一条实线表示,它可能有方向,偶尔在其上还有一个标记。例如,读者可以去图书馆借书和还书,图书管理员可以管理书籍,也可以管理读者的信息,显然,在读者、书籍、管理员之间存在着某种联系。那么在用UML设计类图的时候,就可以在读者、书籍、管理员三个类之间建立关联关系。读者类和图书类之间的关联关系如图1.2所示。

带你认识UML

图1.2 关联

(3)泛化(Generalization)

泛化是一种一般化到特殊化的关系,是一般事物(父类)和该事物较为特殊的种类(子类)之间的关系,子类继承父类的属性和操作,除此之外,子类还添加新的属性和操作。在图形中,泛化关系用带有空心箭头的实线表示,该实线指向父类,如图1.3所示。

带你认识UML

图1.3 泛化

(4)实现(Realization)

实现是类之间的语义关系,其中的一个类指定了由另一个类必须执行的约定。在两种地方会遇到实现关系,一种是在接口和实现它们的类或构件之间,另一种是在用例和实现它们的协作之间。在图形中,实现关系用一条带有空心箭头的虚线表示,它是泛化和依赖关系两种图形的结合,如图1.4所示。

带你认识UML

图1.4 实现

5.UML的视图

UML中的视图一般分为以下5种。

用例视图:用例视图主要强调从系统的外部参与者(主要是用户)的角度所看到的或需要的系统功能。

逻辑视图:逻辑视图主要是从系统的静态结构和动态行为角度显示如何实现系统的功能。

并发视图:并发视图显示了系统的并发性,并解决在并发系统中存在的通信问题和同步问题。

组件视图:组件视图显示代码组件的组织结构。

配置视图:配置视图主要描述了具体如何部署系统。部署指的是将系统配置到由计算机和设备组成的物理结构上。

(1)用例视图

用例视图主要描述一个系统应该具备的功能,指的是从系统的外部参与者所能看到的系统功能。用例表示的是系统的一个功能单元,可以被描述为参与者与系统之间的一次交互作用。系统的参与者可以是一个用户或者另外一个系统。客户要求系统提供的功能被当作多个用例在用例视图中进行描述,一个用例就是对系统的一个用法的通用描述。用例模型的用途主要是列举出系统中的用例和参与者,并指出哪个参与者参与了哪个用例的执行。用例视图是其他4种视图的核心,它的内容直接影响其他视图的开发。

(2)逻辑视图

逻辑视图主要用于描述在用例视图中提出的系统功能的实现。与用例视图相比,逻辑视图主要关注系统的内部,它既描述系统的静态结构(系统中的类、对象及它们之间的关系),也描述系统的动态协作关系。系统的静态结构在类图和对象图中进行描述,而动态模型是在状态图、顺序图、协作图及活动图中进行描述的。逻辑视图的使用者主要是系统的设计人员和开发人员。

(3)并发视图

并发视图主要是从资源的有效利用、代码的并行执行及系统环境中异步事件的处理等方面考虑的。它将系统划分为并发执行的控制,此外,并发视图还需要处理线程之间的通信和同步。并发视图主要由状态图、协作图和活动图组成。并发视图的使用者是开发人员和系统集成人员。

(4)组件视图

组件视图描述系统的实现模块以及它们之间的依赖关系。其中,组件指的是不同类型的代码模块,它是构造应用的软件单元。组件视图中也可以添加组件的其他附加信息,如资源分配或者其他管理信息。组件视图主要由组件图构成。组件视图的使用者是开发人员。

(5)配置视图

部署视图,也称之为配置视图。配置视图主要显示系统的物理部署,它描述位于节点上的运行实例的部署情况。配置视图主要由部署图表示,配置视图还允许评估分配结果和资源分配。配置视图的使用者是开发人员、系统集成人员和测试人员。

6.UML的图

UML图是描述UML视图内容的图形。UML有9种不同的图,通过它们的相互组合提供被建模系统的所有视图。本节分别介绍这些不同的图。

(1)用例图

用例图从用户角度描述系统功能,并指出各功能的操作者。用例图是UML中最简单也是最复杂的一种图。说它简单是因为它采用了面向对象的思想,基于用户角度来描述系统,绘制非常容易,图形表示直观并且容易理解。说它复杂是因为用例图往往不容易控制,要么过于复杂,要么过于简单。用例图展示了一组用例、参与者以及它们之间的关系,如图1.5所示。

带你认识UML

图1.5 用例图

(2)类图

类图是UML面向对象中最常用的一种图,类图可以帮助我们更直观地了解一个系统的体系结构。通过关系和类表示的类图,可以图形化地描述一个系统的设计部分。如图1.6所示。

带你认识UML

图1.6 类图

(3)对象图

UML面向对象中对象图是类图的实例,几乎使用与类图完全相同的标识。两者的不同之处在于对象图显示类的多个对象实例,而不是实例的类。一个对象图是类图的一个实例。由于对象存在生命周期,因此对象图只能在系统某一时间段存在。

(4)状态图

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

带你认识UML

图1.7 状态图

(5)活动图

在UML面向对象中,活动图记录单个操作或方法的逻辑,或者单个业务流程的逻辑。它描述系统中各种活动的执行顺序,通常用于描述一个操作中所要进行的各项活动的执行流程。同时,它也常被用来描述一个用例的处理流程或某种交互流程。

活动图由一些活动组成,图中同时包括了对这些活动的说明。当一个活动执行完毕之后,将沿着控制转移箭头转向下一个活动。在活动图中,还可以方便地描述控制转移的条件和并行执行等要求,如图1.8所示。

带你认识UML

图1.8 活动图

(6)顺序图

顺序图描述对象之间动态的交互关系,主要体现对象之间进行消息传递的时间顺序。

顺序图由一组对象构成,每个对象分别带有一条竖线,称作对象的生命线,它代表时间轴,时间沿竖线向下延伸。在UML面向对象中,顺序图描述这些对象随着时间的推移相互之间交换消息的过程。消息用从一个对象的生命线指向另一个对象的生命线的水平箭头表示。还可以根据需要在图中增加有关时间的说明和其他注释,如图1.9所示。

带你认识UML

图1.9 顺序图

(7)协作图

在UML面向对象中,协作图用于显示组件及其交互关系的空间组织结构,它并不侧重于交互的顺序。协作图显示了交互中各个对象之间的组织交互关系以及对象彼此之间的链接。与顺序图不同,协作图显示的是对象之间的关系。另一方面,协作图没有将时间作为一个单独的维度,因此,序列号就决定了消息及并发线程的顺序。它用带有编号的箭头来描述特定的方案,以显示在整个方案过程中消息的移动情况。协作图主要使用描绘对象之间消息的移动情况来反映具体的方案,并显示对象及其交互关系的空间组织结构,而非交互的顺序,如图1.10所示。

带你认识UML

图1.10 协作图

(8)组件图

组件图,也称为组件图。组件图描述代码部件的物理结构及各部件之间的依赖关系,组件图有助于分析和理解部件之间的相互影响程度。从组件图中可以了解各软件组件(如源代码文件或动态链接库)之间的编译器和运行时的依赖关系。使用组件图可以将系统划分为内聚组件并显示代码自身的结构,如图1.11所示。

带你认识UML

图1.11 组件图

(9)部署图

部署图,也称为部署图。在UML面向对象中,部署图描述系统中硬件和软件的物理配置情况和系统体系结构。

在部署图中,用结点表示实际的物理设备,如计算机和各种外部设备等,并根据它们之间的连接关系,将相应的结点连接起来,并说明其连接方式。在结点里面,说明分配给该结点上运行的可执行构件或对象,从而说明哪些软件单元被分配在哪些结点上运行,如图1.12所示。

带你认识UML

图1.12 部署图

上述9种图可归纳为5类,如表1.1所示。



从应用的角度看,当采用面向对象技术设计系统时,首先是描述需求,其次根据需求建立系统的静态模型,以构造系统的结构,第三步是描述系统的行为。其中在第一步与第二步中所建立的模型都是静态的,包括用例图、类图(包含包)、对象图、组件图和部署图等5种图形,是标准建模语言UML的静态建模机制。其中第三步中所建立的模型或者可以执行,或者表示执行时的时序状态或交互关系。它包括状态图、活动图、顺序图和合作图等4种图形,是标准建模语言UML的动态建模机制。因此,标准建模语言UML的主要内容也可以归纳为静态建模机制和动态建模机制两大类。


7.UML 2.0新特性

统一建模语言UML是以可视化方式描述软件系统的结构和行为的标准语言。UML 2.0在可视化建模方面进行了许多改革和创新。它可以描述现今软件系统中存在的许多技术,例如模型驱动架构(MDA)和面向服务的架构(SOA)。

UML 2.0解决了用户在使用UML 1.x过程中所遇到的一些问题。下面主要针对UML 2.0上层的变化进行简要的说明。

(1)用例图

用例图中的主体内容用例、参与者和通信关联并没有变化。如果用UML 1.x,只能用用例图所归属的包来表达一组用例的逻辑组织关系,即用用例在模型中所处的物理位置表达逻辑组织关系。在UML 2.0中,为每个用例增加了一个称为Subject的特征,这项特征的取值可以作为在逻辑层面划分一组用例的一项依据。用例所属的“系统边界”就是Subject的一种典型例子。

(2)顺序图

顺序图是最常用的一种图。主要用它来描述对象间的交互关系,着重体现交互的时间顺序。对于顺序图,UML 2.0主要做了3方面的改进。

允许在顺序图中明确地表达分支判断逻辑。这样能够将以前要通过两张图才能表达的意思通过一张图就能表达,但这并不意味着顺序图擅长表达这种逻辑,所以并不需要在顺序图中展现所有的分支判断逻辑。

允许“纵向”与“横向”地对顺序图进行拆分与引用。这样就解决了以前一张图由于流程过多造成幅面过大和浏览不方便的问题。

提供了一种新图,称为交互纵览图(Interaction Overview Diagram),可以直观地表达一组相关顺序图之间的转向逻辑。在UML1.x中,通常是通过活动图进行间接表达的。

(3)活动图

活动图是比较常用的一种图,它接近于流程图。在UML 2.0中,活动图增加了许多新特性。例如,泳道可以划分成层次、增加丰富的同步表达能力、在活动图中引入对象等特性。

(4)组件图

组件图是在物理层面对系统结构及内容的直观描述,它最接近于通常意义上的模块结构图。

在UML 2.0中,组件图有比较明显的改进。组件本身内容的表述更清晰,包括对组件所提供的接口、所要求的接口和组件之间的依赖关系通过组装连接器(Assembling Connector)更加明确地表达等。

(5)新增加的图

UML 2.0中增加了包图、组合结构图、交互纵览图和计时图。

包图展现模型要素的基本组织单元及这些组织单元之间的依赖关系,包括引用关系(Package Import)和扩展关系(Package Merge)。在通用的建模工具中,一般可以用类图描述包图中的逻辑内容。

组合结构图描述系统中的某一部分(即组合结构)的内部内容,包括该部分与系统其他部分的交互点,这种图能够展示该部分内容内部参与者的配置情况。

组合结构图中引入了一些重要的概念。例如,端口(Port),端口将组合结构与外部环境隔离,实现了双向的封装,既涵盖了该组合结构所提供的行为(Provided Interface),同时也指出了该组合结构所需要的服务(Required Interface);如协议(Protocol),基于UML中的协作(Collaboration)的概念,展示那些可复用的交互序列,其实质目的是描述那些可以在不同上下文环境中复用的协作模式。协议中所反映的任务由具体的端口承担。

计时图是一种可选的交互图,展示交互过程中的真实时间信息、具体描述对象状态变化的时间点,以及维持特定状态的时间段。

8.系统开发阶段

系统开发共有5个阶段:需求分析、系统分析、系统设计、程序实现和测试阶段。

软件过程对于组织的重要性,就如同算法对子程序运行一般。合适的算法可以提高运行的效率,不合适的算法则不仅无法提高效率,而且会浪费组织资源的使用率。软件开发过程牵涉到的是更为复杂的人、事、物,而算法则是纯粹的机器代码执行。本章将介绍构成软件过程(Software Process)的基本活动,以及几种在软件与系统产业界常用的软件过程。

软件开发过程主要是描述开发软件系统所牵涉到的相关活动,以及如何循序渐进地执行这些活动。对于不同的系统、组织及开发,其管理工具所采用的流程都有可能不同。例如,有些系统适合采用按部就班的方式,从分析、设计、实现、测试到移交逐步地进行;有些系统则适合采用反复循环的方式,不断地重复执行分析、设计、实现、测试等活动。

需求分析的主要内容是了解客户的需求、分析系统的可行性、分析需求的一致性及正确性等。

设计是将需求转换为系统的重要过程。设计包含架构设计、模块间的接口设计、数据库设计、算法设计与数据结构设计等。许多软件工程师通常会认为,自己可以立即编写程序而不需要分析需求和撰写设计,因而忽略了规划的重要性,直接进行程序编写。此种做法对于软件系统而言,可能会造成种种问题。举例来说,如果没有架构设计,就会缺乏整体性的思考,系统可能因此而无法满足接口需求以及非功能性的需求(如性能、可维护性等);此外,还可能会因为忽略事先的规划与分析而造成重复工作等。

实现指的是通过程序语言,将所设计的内容转化为可以执行的软件系统。除错是实现活动中不可避免的工作,主要是修改程序编写过程中产生的错误。除此之外,单元测试通常也会在实现阶段进行,目的是要确认单元程序代码的正确性。当程序有错误时,需要进行除错,将错误排除。

测试是对实现的程序代码模块进行检测,检验其功能是否正确、性能是否符合要求。一般而言,测试可以分为单元测试、集成测试、系统测试和验收测试。

单元测试:测试单元模块功能是否能正常运行。

集成测试:测试模块或子系统的接口集成是否能正常运行。

系统测试:测试系统的整体性能、安全性、稳定度等非功能性需求是否符合预期目标。

验收测试:测试系统的整体性能是否符合使用者的要求。

软件系统的特性之一就是需求会经常发生变动,许多系统每隔半年甚至是几个月就会改版。软件维护的目的是要确保已经发行的软件系统可以持续满足客户的需要。一般而言,维护可以有如下几种情况:修复错误、增加或变更功能,以及因为平台改变所做的调整。

9.小结

UML是一种语言:它遵循特定的规则,允许创建各种模型并不告诉设计者需要创建哪些模型,而且不提供开发过程。UML是可视化语言:UML是图形化语言,用于构造系统或理解系统的语言。

UML的组成共包括三部分,即元素、图和关系。元素是UML中重要的组成部分,关系把元素紧密联系在一起,图是很多有相互关系的元素的组。

UML中的元素主要有类、接口、用例、组件、节点、消息、连接、状态、事件、活动等。UML图是描述UML视图内容的图形。UML有9种不同的图,通过它们的相互组合提供被建模系统的所有视图。可以将这9种图归结为5大类:静态图包括类图、对象图和包图;行为图包括状态图和活动图;用例图;交互图包括顺序图和协作图;实现图包括组件图和部署图。





最后,以上是我学习UML过程中整理而成,本人水平有限,所以难免有错误不妥之处,还请大家多多指正。


PS:祝大家暑假快乐!


欢迎关注

艾曼爷爷


如果觉得不错,欢迎分享给其他的小伙伴们 :)


推荐阅读:

  

    

    



以上是关于带你认识UML的主要内容,如果未能解决你的问题,请参考以下文章

LaoCat带你认识容器与镜像(实践篇二下)

转帖一文带你认识微内核

一文带你认识AscendCL

0基础带你认识爬虫

万字总结,体系化带你全面认识 Nginx !

带你认识什么是Web Server