UML概念:
什么是 UML?
UML 是 OMG 在1997年1月提出了创建由对象管理组和 UML1.0 规范草案;
UML 是一种为面向对象开发系统的产品进行说明、可视化、和编制文档的标准语言;
UML 作为一种模型语言,它使开发人员专注于建立产品的模型和结构,而不是选用什么程序语言和算法实现;
UML 是不同于其他常见的编程语言,如C + +,Java中,COBOL等,它是一种绘画语言,用来做软件蓝图;
UML 不是一种编程语言,但工具可用于生成各种语言的代码中使用UML图;
UML 可以用来建模非软件系统的处理流程,以及像在一个制造单元等.
UML 的目标:
UML 的目标是定义一些通用的建模语言并对这些建模语言做出简单的说明,这样可以让建模者理解与使用。UML 也是为普通人和有兴趣的人而开发的系统,它可以是一个软件或者使用非软件,它必须是明确的。我们不将 UML 作为一个开发方法,而是随着流程做一个成功的系统。
现在我们可以明确的了解 UML 的目标就是 UML 被定义为一个简单的建模机制,帮助我们按照实际情况或者按照我们需要的样式对系统进行可视化;提供一种详细说明系统的结构或行为的方法;给出一个指导系统构造的模板;对我们所做出的决策进行文档化。
l
UML建模类型
结构建模
结构建模具有捕捉静态的功能,包括下列各项:
- 类图
- 对象图
- 部署图
- 包图
- 复合结构图
- 组件图
结构模型代表的系统架构,这个框架的所有其他组件存在的地方。因此,类图,组件图和部署图的部分结构建模。它们都代表的元素和机制将它们组装。
但是,从来没有的结构模型描述系统的动态行为。类图中是最广泛使用的结构图。
行为建模
行为建模描述了在系统中的相互作用,代表之间的交互的结构图,行为建模显示系统的动态性质,包括下列各项:
- 活动图
- 交互图
- 用例图
所有上述的显示在一个系统中流动的动态序列。
架构建模
架构建模表示的是一个系统的总体框架,它包含了系统的结构和行为的元素。架构建模可以被定义为整个系统的蓝图。包图是根据架构模型进行的。
UML构建模块的要素:
UML构建模块的要素有3个:事物,关系,UML图
事物
是实体抽象化的最终结果,是 UML 构建块最重要的组成部分,事物的分类如下:
事物分为:结构事物,行为事物,分组事物,行为事物
结构事物
类
类是指具有相同属性、方法、关系和语义的对象的集合;
接口
接口是指类或组件所提供的服务(操作),描述了类或组件对外可见的动作;
协作
协作定义元素之间的相互作用;
用例
用例定义了执行者(在系统外部和系统交互的人)和被考虑的系统之间的交互来实现的一个业务目标;
组件
组件描述物理系统的一部分;
节点
一个节点可以被定义为在运行时存在的物理元素;
行为事物
指的是 UML 模型中的动态部分,代表语句里的 "动词",表示模型里随着时空不断变化的部分,包含两类:
交互
交互被定义为一种行为,包括一组元素之间的消息交换来完成特定的任务。
状态机
由一系列对象的状态组成,它是有用的,一个对象在其生命周期的状态是很重要的。
分组事物
可以把分组事物看成是一个"盒子",模型可以在其中被分解。目前只有一种分组事物,即包(package)。结构事物、动作事物甚至分组事物都有可能放在一个包中。包纯粹是概念上的,只存在于开发阶段,而组件在运行时存在。
包
封装是唯一一个分组事物可收集结构和行为的东西。
注释事物
注释事物可以被定义为一种机制来捕捉UML模型元素的言论,说明和注释。注释是唯一一个注释事物。
注释
注释用于渲染意见,约束等的UML元素。
关系
是另一个最重要的构建块UML,它显示元素是如何彼此相关联,此关联描述的一个应用程序的功能,UML中定义了四种关系:
依赖关系:
依赖是两件事物之间的语义联系,其中一个事物的变化也影响到另一个事物。
协作:
一种描述一组对象之间连接的结构关系,如聚合关系(描述了整体和部分间的结构关系);
泛化:
泛化可以被定义为一个专门的元件连接关系与一个广义的元素,它基本上描述了在对象世界中的继承关系,是一种一般化-特殊化的关系;
实现:
类之间的语义关系,其中的一个类指定了由另一个类保证执行的契约。
UML图
用例图
用例图描述了系统提供的一个功能单元。
用例图的主要目的是帮助开发团队以一种可视化的方式理解系统的功能需求,包括基于基本流程的"角色"(actors,也就是与系统交互的其他实体)关系,以及系统内用例之间的关系。
用例图一般表示出用例的组织关系--要么是整个系统的全部用例,要么是完成具有功能(例如,所有安全管理相关的用例)的一组用例。
要在用例图上显示某个用例,可绘制一个椭圆,然后将用例的名称放在椭圆的中心或椭圆下面的中间位置。要在用例图上绘制一个角色(表示一个系统用户),可绘制一个人形符号。角色和用例之间的关系使用简单的线段来描述,
图字(从上到下):CD销售系统;查看乐队CD的销售统计;乐队经理;查看Billboard 200排行榜报告;唱片经理;查看特定CD的销售统计;检索最新的Billboard 200排行榜报告;排行榜报告服务
用例图通常用于表达系统或者系统范畴的高级功能。
如图所示,可以很容易看出该系统所提供的功能。这个系统允许乐队经理查看乐队CD的销售统计报告以及Billboard 200排行榜报告。它也允许唱片经理查看特定CD的销售统计报告和这些CD在Billboard 200排行榜的报告。这个图还告诉我们,系统将通过一个名为"排行榜报告服务"的外部系统提供Billboard排行榜报告。
此外,在用例图中,没有列出的用例表明了该系统不能完成的功能。例如,它不能提供给乐队经理收听Billboard 200上不同专辑中的歌曲的途径 -- 也就是说,系统没有引用一个叫做"收听Billboard 200上的歌曲"的用例。这种缺少不是一件小事。在用例图中提供清楚的、简要的用例描述,项目赞助商就很容易看出系统是否提供了必须的功能。
类图
类图表示不同的实体(人、事物和数据)如何彼此相关;换句话说,它显示了系统的静态结构。
类图可用于表示逻辑类,逻辑类通常就是业务人员所谈及的事物种类--摇滚乐队、CD、广播剧;或者贷款、住房抵押、汽车信贷以及利率。类图还可用于表示实现类,实现类就是程序员处理的实体。
实现类图或许会与逻辑类图显示一些相同的类。然而,实现类图不会使用相同的属性来描述,因为它很可能具有对诸如Vector和HashMap这种事物的引用。
类在类图上使用包含三个部分的矩形来描述。最上面的部分显示类的名称,中间部分包含类的属性,最下面的部分包含类的操作(或者说"方法")。
对象图
对象图的目的与类图类似。
不同的是,一个类图代表一个抽象的模型,包括类和它们之间的关系。但是,由于对象存在生命周期,因此UML对象图只能在系统某一时间段存在。
这意味着对象图是更接近实际的系统行为。目的是在一个特定的时刻捕捉到静态的系统视图。
上图是一个对象图的一个例子。它代表了订单管理系统,我们已经讨论了在类图。下图是该系统的一个实例,在一个特定的时间购买。它具有以下的对象
-
顾客
-
订单
-
特殊订单
-
一般订单
现在客户对象(C)是与三阶对象(O1,O2和O3)。这些订单对象相关联的特殊订单和一般订单对象(S1,S2和N1)。顾客具有以下三个具有不同数目的订单(12,32和40),用于所考虑的特定的时间。
现在,客户可以在将来增加的订单数量,在这种情况下对象图将反映。如果订单、特殊订单和正常秩订单对象那么观察会发现,他们有一些值。
订单的值是12,32和40,这意味着,这些对象都拥有这些实例时,捕获特定时刻的值(这里是购买时的时刻被视为特定时间)。
相同特别订订单和正常订单对象所具有的订单数分别为20,30和60。如果被认为是一个不同的时间购买,那么这些值将发生相应的变化。
序列图(交互图)
序列图显示具体用例(或者是用例的一部分)的详细流程。它几乎是自描述的,并且显示了流程中中不同对象之间的调用关系,同时还可以很详细地显示对不同对象的不同调用。
序列图有两个维度:垂直维度以发生的时间顺序显示消息/调用的序列;水平维度显示消息被发送到的对象实例。
序列图的绘制非常简单。横跨图的顶部,每个框表示每个类的实例(对象)。在框中,类实例名称和类名称之间用空格/冒号/空格来分隔,。如果某个类实例向另一个类实例发送一条消息,则绘制一条具有指向接收类实例的开箭头的连线,并把消息/方法的名称放在连线上面。对于某些特别重要的消息,您可以绘制一条具有指向发起类实例的开箭头的虚线,将返回值标注在虚线上。
阅读序列图也非常简单。从左上角启动序列的"驱动"类实例开始,然后顺着每条消息往下阅读。记住:虽然图所示的例子序列图显示了每条被发送消息的返回消息,但这只是可选的。
首先调用的是 sendOrder(),这是一个订单对象的方法;在下一次调用 confirm (),这是一个 SpecialOrder 对象的方法;最后调用 Dispatch (),它是一种方法的 SpecialOrder 对象。所以这里的图主要描述方法从一个对象到另一个对象的调用,在系统运行时这也是实际情况。
协作图(交互图)
协作图显示对象的组织,如下图所示。
这里协作图的方法调用序列是表示,由一些数字技术,如下所示。
该数字表示方法如何被称为此起彼伏。我们已经采取了相同的订单管理系统,协作图来描述。
这些调用方法类似的序列图。但不同的是,序列图中未介绍的对象组织,而协作图中示出的对象的组织。
现在选择这两个图表之间主要强调的是需求类型。如果时间序列是很重要的,那么序列图中被使用,并且,如果需要的组织,那么使用协作图。
交互图使用方法:
-
按时间顺序的控制流建模。
-
为了模拟流结构组织控制。
-
对于正向工程。
-
逆向工程。
状态图
状态图表示某个类所处的不同状态和该类的状态转换信息。有人可能会争论说每个类都有状态,但不是每个类都应该有一个状态图。只对"感兴趣的"状态的类(也就是说,在系统活动期间具有三个或更多潜在状态的类)才进行状态图描述。
状态图的符号集包括5个基本元素:初始起点,它使用实心圆来绘制;状态之间的转换,它使用具有开箭头的线段来绘制;状态,它使用圆角矩形来绘制;判断点,它使用空心圆来绘制;以及一个或者多个终止点,它们使用内部包含实心圆的圆来绘制。要绘制状态图,首先绘制起点和一条指向该类的初始状态的转换线段。状态本身可以在图上的任意位置绘制,然后只需使用状态转换线条将它们连接起来。
第一个状态表示空闲状态的过程从哪里开始;接下来的状态表示到达的事件,如发送请求,确认请求,并调度顺序,这些事件负责订单对象的状态变化。
在对象的生命周期(这里为了对象)通过以下状态的时候有可能也存在一些不正常的退出。出现这种不正常的退出可能是由于系统中的一些问题。
整个生命周期完成时,它被视为完整的交易。
一个对象的初始状态和最终状态也如上图所示。
状态图主要的用法可以被描述为:
-
为了模拟一个系统的对象的状态。
-
为了模拟响应系统。反应体系由反应物。
-
为了找出事件负责任的状态变化。
-
正向和逆向工程。
活动图
活动图表示在处理某个活动时,两个或者更多类对象之间的过程控制流。
活动图可用于在业务单元的级别上对更高级别的业务过程进行建模,或者对低级别的内部类操作进行建模。
活动图的符号集与状态图中使用的符号集类似。像状态图一样,活动图也从一个连接到初始活动的实心圆开始。活动是通过一个圆角矩形(活动的名称包含在其内)来表示的。活动可以通过转换线段连接到其他活动,或者连接到判断点,这些判断点连接到由判断点的条件所保护的不同活动。结束过程的活动连接到一个终止点(就像在状态图中一样)。作为一种选择,活动可以分组为泳道(swimlane),泳道用于表示实际执行活动的对象,如图所示。
活动图,具有两个泳道,表示两个对象的活动控制:乐队经理,以及报告工具
图字(沿箭头方向):乐队经理;报告工具;选择"查看乐队的销售报告";检索该乐队经理所管理的乐队;显示报告条件选择屏幕;选择要查看其销售报告的乐队;从销售数据库检索销售数据;显示销售报告。
该活动图中有两个泳道,因为有两个对象控制着各自的活动:乐队经理和报告工具。整个过程首先从乐队经理选择查看他的乐队销售报告开始。然后报告工具检索并显示他管理的所有乐队,并要求他从中选择一个乐队。在乐队经理选择一个乐队之后,报告工具就检索销售信息并显示销售报告。该活动图表明,显示报告是整个过程中的最后一步。
组件图
组件图是用来描述一个系统的物理构件。此神器包括文件,可执行文件,库等。
所以这张图的目的是不同的,组件图的过程中使用的应用程序的实施阶段。但它准备提前以可视化的实现细节。
组件图显示了系统中各种软件组件的依赖关系
上面是一个订单管理系统的组件图,其中的构件是文件。所以,该图显示了在应用程序的文件以及它们之间的关系。在实际组件图还包含 dll 文件,库,文件夹等。
部署图
部署图表示该软件系统如何部署到硬件环境中。
它的用途是显示该系统不同的组件将在何处物理地运行,以及它们将如何彼此通信。
因为部署图是对物理运行情况进行建模,系统的生产人员就可以很好地利用这种图。
部署图中的符号包括组件图中所使用的符号元素,另外还增加了几个符号,包括节点的概念。一个节点可以代表一台物理机器,或代表一个虚拟机器节点(例如,一个大型机节点)。要对节点进行建模,只需绘制一个三维立方体,节点的名称位于立方体的顶部。所使用的命名约定与序列图中相同:[实例名称] : [实例类型](例如,"w3reporting.myco.com : Application Server")。
部署图元素:
1、结点(Node)
结点是存在与运行时的代表计算机资源的物理元素,可以是硬件也可以是运行其上的软件系统,比如64主机、Windows server 2008操作系统、防火墙等。
结点用三维盒装表示,如下图所示:
2、结点实例(Node Instance)
结点实例的命名格式:Node Instance : node。它与结点的区别在于名称有下划线和结点类型前面有冒号,冒号前面可以有示例名称也可以没有示例名称,如下图:
3、结点类型(Node Stereotypes)
结点类型有:cdrom、cd-rom、computer、disk array、pc、pc client、pc server、secure、server、storage、unix server、user pc,并在结点的右上角用不同的图标表示,如下图:
4、物件(Artifact)
物件是软件开发过程中的产物,包括过程模型(比如用例图、设计图等等)、源代码、可执行程序、设计文档、测试报告、需求原型、用户手册等等。物件表示如下,带有关键字 artifact 和文档图标
5、连接(Association)
结点之间的连线表示系统之间进行交互的通信路径,这个通信路径称为连接(Association),如下图所示,连接中有网络协议:
6、结点容器(Node as Container)
一个结点可以包括其他的结点,比如组件或者物件,则称此结点为结点容器(Node as Container)。如下图所示,结点(Node)包容了物件(Artifact):
完整的部署图
假定应用程序是一个基于 Web 的应用程序部署在集群环境中使用服务器1,服务器2和服务器3。用户连接到使用互联网的应用程序。控制流从缓存服务器的集群环境中。
部署图主要用于系统工程师。这些图用来描述的物理组件(硬件)以及它们的分布和关联。
为了阐述清楚细节,我们可以想像的硬件组件/节点上的软件组件位于部署图。
软件应用程序的开发需要复杂的业务流程模型。为了满足业务的需求,一个软件应用只做到高效是不够的,还应考虑到业务是否能够支持用户的不断增长以及响应的时间是否够快等。
软件应用程序可以是独立的,基于 Web,分布式,基于大型机和更多。
使用部署图可以描述如下:
-
为了模拟一个系统的硬件拓扑。
-
嵌入式系统建模。
-
为了模拟一个客户机/服务器系统的硬件的详细信息。
-
为了模拟硬件的分布式应用程序的细节。
-
正向和逆向工程。
参考资料:
https://www.w3cschool.cn/uml_tutorial/uml_tutorial-c1gf28pd.html
https://www.ibm.com/developerworks/cn/rational/r-uml/