UML14种图之部署图和构件图
- 部署图
- 构件图
- 接口(Interface)
- 外部接口——端口
- 连接器(Connector)——连接件
- 构件图中的关系
- 组件图的建模技术
- 案例(分析一个已经存在的系统)
部署图
一、什么是部署图?
部署图(deployment diagram,配置图):是用来显示系统中软件和硬件的物理架构。从部署图中,您可以了解到软件和硬件组件之间的物理关系以及处理节点的组件分布情况。使用部署图可以显示运行时系统的结构,同时还传达构成应用程序的硬件和软件元素的配置和部署方式。
****
什么时候用部署图?
软件实现完成后用部署图画出软,硬件之间的物理拓扑结构,清晰的说明系统的使用部署,环境等情况。通过部署图,系统的相关人员可以知道软件应该安装在具体的那个硬件之上。
部署图的作用:
部署图用于描述部署软件组件的硬件组件。构件图和部署图密切相关。
(1)可视化系统的硬件拓扑
(2)描述用于部署软件的硬件组件
(3)描述运行时处理节点
二、部署图的组成
部署图由节点和关系两部分组成。有的部署图中也包含构件,但是构件必须在相对应的节点上,不是孤立的存在的。
1、节点:计算资源的通用名称。包括处理器和设备。两者的区别:前者是可以执行程序的硬件结构,如计算机和服务器等;后者是通过接口对外进行的服务,如打印机。
标记:每个节点应该给出应有的标记说明,如操作系统,供应商等。
表示:立体矩形框,处理器是带阴影的立方体,设备室不带阴影的立方体。
2、关系:依赖和关联。
同样在画关系时应该写明节点间联系的名称。如:服务器和客户端通过局域网连接。
三、绘制部署图
1、找出所要绘图系统的节点,确定节点。
2、找出节点间的通信联系。
3、绘制部署图,每个节点都有名称,写明节点间物理联系的名称。
下图是机房收费系统的部署图:一个服务器,多个客户端。
五、部署图和构件图配合使用。
部署图和构件图都是对系统实现的描述,两者一起使用,效果更明显。
注:关于部署图这篇文章来源于:
构件图
构件图(Component diagram),又称组件图。是面向对象系统从物理方面建模时用到的图之一,显示一组构件之间的组织和依赖关系。使用构件图的思想是复用。就像是我们盖房子,当房子的大体框架建好之后,剩下的门和窗户家具之类的直接拿来安装上即可,不需要再从新制作,直接拿来复用的思想。这些门和窗户就相当于一个个的构件。在面向对象系统的物理方面进行建模要用到两种图:组件图和配置图(部署图)。
前面的类图用例图定义了系统的问题域词汇和系统期望的行为,序列图和状态图描述了问题域中事物是如何共同协作来完成这个行为的。前面做的都只是一些逻辑的蓝图,而构件图就是要把这些蓝图转化为存在于比特事件中的事物,是真实的物理的可触摸的事物,用构件图来可视化这些物理构件的静态方面以及它们之间的关系。
构件图(Component Diagram)又称为组件图,他描述的是在软件系统中遵从并实现一组接口的物理的、可替换的软件模块。
详细来说,构件图包括以下五个部分:
构件图 = 构件(Component) + 接口(Interface) + 关系(Relationship) + 端口(Port) + 连接器(Connector)
基本概念:组件图即是用来描述组件与组件之间关系的一种UML图。组件图在宏观层面上显示了构成系统某一个特定方面的实现结构。
组件图中主要包含三种元素,即组件、接口和关系。
组件图通过这些元素描述了系统的各个组件及之间的依赖关系,还有组件的接口及调用关系。此外,组件图还可以使用包来进行组织,使用注解与约束来进行解释和限定。
组件图在面向对象设计过程中起着非常重要的作用:它明确了系统设计,降低了沟通成本,而且按照面向对象方法进行设计的系统和子系统通常保证了低耦合度,提高了可重用性。
组件图的组成元素:组件、接口、组件图中的关系、组件的内部结构。
组件,是系统设计的一个模块化部分,它隐藏了内部的实现,对外提供了一组接口。
组件是一个封装完好的物理实现单元,它具有自己的身份标示和定义明确的接口。并且由于它对接口的实现过程与外部元素独立,所以组件具有可替换性。
组件在系统中一般存在三种类型,分别为部署组件、工作产品组件和执行组件。
a.运行系统需要配置的组件,是形成可执行文件的基础—操作系统、JAVA虚拟机、DBMS;
b.包括模型、源代码和用于创建配置组件的数据文件,它们是配置组件的来源—UML图、java类和数据库表;
c.在运行时创建的组件,是最终可运行的系统产生的允许结果—.net组件
下面举两个例子来说明
- (1)一个ATM机的组件:
系统设计的一个模块化部分
显示界面
读卡机
业务操作----查询、取款、转账、挂失
- (2)学校教务系统的组件:
系统设计的一个模块化部分
登录界面、业务动作、层业务实现层
学生管理、教师管理、成绩维护、选课
接口(Interface)
•接口(interface)接口由一组操作组成,它指定了一个契约,这个契约必须由实现和使用这个接口的构件的所遵循。
接口分提供接口和请求接口
•把构件实现的接口称为提供接口(供接口),这意味着构件的提供接口是给其它构件提供服务的。实现接口的构件支持由该接口所拥有的特征,包括接口拥有的约束。
•构件使用的接口被称为请求接口(需接口),即构件向其它构件请求服务时要遵循的接口
表示方式:
•供接口用“棒棒糖”式的图形表示,即由一个封闭的圆形与一条直线组成。
•需接口用“插座”式的图形表示,即由一个半圆与一条直线组成。
在java语言中供接口通过关键字implements来显式地表示,需接口被类所使用的任何接口类型隐式地定义。
外部接口——端口
•端口是UML2.0引入的概念
•端口描述了在构件与它的环境之间以及在构件与它的内部构件之间的一个显示地交互点
•端口是一个封装构件的显示的对外窗口,所有进出构件的交互都要通过端口。
•使用端口能在更大的程度上增加构件的封装性和可替代性。
•端口是构件的一部分,端口的实例随着它们所属的构件的实例一起被创建和撤消。
<1>接口与端口的关系
提供接口说明了通过端口来提供服务,请求接口说明了通过端口需要从其它构件获得服务。
一个构件可以通过一个特定端口同另一个构件通讯,而且通讯完全是通过由端口支持的接口来描述的。
<2>表示方式
尾部加小方框的正常接口表示,小方框就被称为端口。
连接器(Connector)——连接件
UML2.0提供两种类型的连接器:
1.代理连接器(Delegation Connector)——委托连接件:连接外部接口的端口和内部接口。
2.组装连接器(Assembly Connector)——组装连接件:组件连接器表示构件之间的关系,它连接构件内部的类,将一个构件的供接口和一个构件的需接口捆绑在一起
- 连接端口意味着请求端口要调用提供端口中的操作,以得到服务。
- 立端口和接口的优点在于在设计时,两个构件彼此不需要了解对方的内部,只要它们的接口是相互兼容的即可。
- 如果一个端口提供一个特定的接口而另一个端口需要这个接口,且接口是兼容的,那么这两个端口-便是可连接的。
<1>组装连接件
有两种表示装配连接件的方法:
1.如果要显式地把两个构件实例衔接在一起,在它们的端口之间画一条线即可。
2.如果两个构件实例相连是由于它们有兼容的接口,则可以使用一个“球-穴”标记来表示构件实例之间的连接关系。
装配连接件是两个构件实例间的连接件,它定义一个构件实例提供服务,另一个构件实例使用这些服务。装配连接件用于把一个请求接口或端口与一个提供接口或端口的连接起来。在执行时,消息起源于一个请求端口,沿着连接件传递,被交付到一个提供端口
<2>委托连接件
委托有这样的含义:具体的消息流将发生在所连接的端口之间,可能要跨越多个层次,最终到达要对消息进行处理的最终部件实例。这样,使用委托连接件可对构件行为的层次分解建模。
委托连接件把外部对构件端口的请求分发到构件内部的部件实例进行处理,或者通过构件端口把构件内部部件实例向构件外部的请求分发出去。
构件内部的一个部件可以是另一个构件或是一个类。注意,必须在两个提供端口间或两个请求端口间定义委托连接件。
注意事项:因为构件是可以嵌套的,所以内部构件之间的连接(球-穴)是组装连接件,内部构件与端口之间的连接(实线箭头)是委托连接件。
组件的内部结构
在UML 2规范中,组件允许通过嵌套结构来表现组件的内部结构。
子组件之间通过接口建立关系。图中组件边缘的小矩形被称为端口,端口可以理解为组件的入口与出口,组件通过端口与外部元素相互协作。端口上可以添加提供接口或需求接口来使组件得以扩展。
构件图中的关系
1.依赖关系
组件图用依赖关系表示各组件之间存在的关系类型。
在UML中,组件图中依赖关系的表示方法与类图中依赖关系相同,都是一个由客户指向提供者的虚线箭头。
- 组件与需求接口之间建立依赖关系
- 组件与组件之间建立依赖关系:说明在运行过程中A在某些行为上依靠组件B的支持
2.实现关系
组件与提供接口之间建立实现关系
组件图的建模技术
- 对源代码结构建模
(1)识别出感兴趣的源代码文件集合,并建模为组件。
(2)如果系统规模较大,使用包对组件进行分组。
(3)可以使用约束或注解来表示源代码的作者、版本号等信息。
(4)使用接口和依赖关系来表示这些源代码文件之间的关系。
(5)检查组件图的合理性,并识别源代码文件的优先级以便进行开发工作。
- 对可执行程序结构建模
(1)识别出相关的运行组件集合。
(2)考虑集合中每个组件的类型。
(3)如果系统规模较大,可以使用包对组件进行分组。这里包的使用可以对应于相应文件的文件存储结构。
(4)分析组件之间的关系,使用接口和依赖关系建模这些关系。
(5)考量建模结果是否实现了组件的各个特性,对建模的结果进行细化。
案例(分析一个已经存在的系统)
画出下列描述的网上商城组件图:购物车、订单、库存、支付管理组件,使用组件图进行完善。
识别组件:购物车、订单、库存、支付管理
识别组件之间的关系通过一个现实的例子。
(1)在购买一件商品时,我们首先是浏览商品,了解商品详情。在商品详细页面上,我们可以看到一个“加入购物车”,点击之后,所浏览的商品即可加入我们的购物车。因此,购物车组件必须对外提供一个“加入购物车”的接口。
(2)当我们进入购物车查看购物车里的商品时,会看到页面里有一个商品数量的选项。在这里可以增加或减少商品的数量。但增加数量的上限不能超过该商品的库存,由此,可以知道购物车需要知道商品的库存信息,也即,库存组件必须给购物车提供一个“查询商品库存”的接口。在该页面中,还有一个“结算”的按钮,点击之后,我们会进入订单的页面。由此,订单组件必须对购物车提供一个“生成订单”的接口。
(3)进入订单页面后,可以看到有一个“提交订单”的按钮,点击之后进入支付管理的页面。由此,支付管理组件必须对订单组件提供一个“提交订单”的接口。
(4)提交订单之后,我们来到支付管理页面,在这里有一个“下一步”的按钮,根据我们网购的经验,可以知道点击之后我们会进入响应的网银支付系统。因此,支付管理组件需要支付系统提供一个支付的接口。
经过以上的分析,我们可以把组件及组件之间的联系用一个表来表示:
组件图
【说明】
参考材料:《UML面向对象建模基础》
最后笔者总结如下:
部署图和构件图的区别和联系:
构件图主要目标是集中在描述系统中有哪些构件,以及构件的组成和之间的依赖关系。部署图描述的是靠节点完成,描述软件是如何在硬件上映射的以及网络的拓扑结构。
在构件图中关系可以是四种,即关联、依赖、实现和泛化。而在部署图中各节点之间的关系只有关联和依赖。