UML14种图之部署图和构件图
部署图
构件图
基本概念:组件图即是用来描述组件与组件之间关系的一种UML图。组件图在宏观层面上显示了构成系统某一个特定方面的实现结构。
组件图中主要包含三种元素,即组件、接口和关系。
组件图通过这些元素描述了系统的各个组件及之间的依赖关系,还有组件的接口及调用关系。此外,组件图还可以使用包来进行组织,使用注解与约束来进行解释和限定。
组件图在面向对象设计过程中起着非常重要的作用:它明确了系统设计,降低了沟通成本,而且按照面向对象方法进行设计的系统和子系统通常保证了低耦合度,提高了可重用性。

组件图的组成元素:组件、接口、组件图中的关系、组件的内部结构。
组件,是系统设计的一个模块化部分,它隐藏了内部的实现,对外提供了一组接口。
组件是一个封装完好的物理实现单元,它具有自己的身份标示和定义明确的接口。并且由于它对接口的实现过程与外部元素独立,所以组件具有可替换性。


组件在系统中一般存在三种类型,分别为部署组件、工作产品组件和执行组件。
a.运行系统需要配置的组件,是形成可执行文件的基础—操作系统、JAVA虚拟机、DBMS;
b.包括模型、源代码和用于创建配置组件的数据文件,它们是配置组件的来源—UML图、java类和数据库表;
c.在运行时创建的组件,是最终可运行的系统产生的允许结果—.net组件
下面举两个例子来说明
- (1)一个ATM机的组件:
系统设计的一个模块化部分
显示界面
读卡机
业务操作—-查询、取款、转账、挂失
- (2)学校教务系统的组件:
系统设计的一个模块化部分
登录界面、业务动作、层业务实现层
学生管理、教师管理、成绩维护、选课
接口(Interface)
•接口(interface)接口由一组操作组成,它指定了一个契约,这个契约必须由实现和使用这个接口的构件的所遵循。


在java语言中供接口通过关键字implements来显式地表示,需接口被类所使用的任何接口类型隐式地定义。
外部接口——端口
<1>接口与端口的关系
提供接口说明了通过端口来提供服务,请求接口说明了通过端口需要从其它构件获得服务。
一个构件可以通过一个特定端口同另一个构件通讯,而且通讯完全是通过由端口支持的接口来描述的。
<2>表示方式
尾部加小方框的正常接口表示,小方框就被称为端口。

连接器(Connector)——连接件
- 连接端口意味着请求端口要调用提供端口中的操作,以得到服务。
- 立端口和接口的优点在于在设计时,两个构件彼此不需要了解对方的内部,只要它们的接口是相互兼容的即可。
- 如果一个端口提供一个特定的接口而另一个端口需要这个接口,且接口是兼容的,那么这两个端口-便是可连接的。
<1>组装连接件
装配连接件是两个构件实例间的连接件,它定义一个构件实例提供服务,另一个构件实例使用这些服务。装配连接件用于把一个请求接口或端口与一个提供接口或端口的连接起来。在执行时,消息起源于一个请求端口,沿着连接件传递,被交付到一个提供端口

<2>委托连接件
委托有这样的含义:具体的消息流将发生在所连接的端口之间,可能要跨越多个层次,最终到达要对消息进行处理的最终部件实例。这样,使用委托连接件可对构件行为的层次分解建模。
委托连接件把外部对构件端口的请求分发到构件内部的部件实例进行处理,或者通过构件端口把构件内部部件实例向构件外部的请求分发出去。
构件内部的一个部件可以是另一个构件或是一个类。注意,必须在两个提供端口间或两个请求端口间定义委托连接件。
注意事项:因为构件是可以嵌套的,所以内部构件之间的连接(球-穴)是组装连接件,内部构件与端口之间的连接(实线箭头)是委托连接件。
组件的内部结构
在UML 2规范中,组件允许通过嵌套结构来表现组件的内部结构。
子组件之间通过接口建立关系。图中组件边缘的小矩形被称为端口,端口可以理解为组件的入口与出口,组件通过端口与外部元素相互协作。端口上可以添加提供接口或需求接口来使组件得以扩展。

构件图中的关系
- 组件与需求接口之间建立依赖关系
- 组件与组件之间建立依赖关系:说明在运行过程中A在某些行为上依靠组件B的支持
2.实现关系
组件与提供接口之间建立实现关系

组件图的建模技术
- 对源代码结构建模
(1)识别出感兴趣的源代码文件集合,并建模为组件。
(2)如果系统规模较大,使用包对组件进行分组。
(3)可以使用约束或注解来表示源代码的作者、版本号等信息。
(4)使用接口和依赖关系来表示这些源代码文件之间的关系。
(5)检查组件图的合理性,并识别源代码文件的优先级以便进行开发工作。
- 对可执行程序结构建模
(1)识别出相关的运行组件集合。
(2)考虑集合中每个组件的类型。
(3)如果系统规模较大,可以使用包对组件进行分组。这里包的使用可以对应于相应文件的文件存储结构。
(4)分析组件之间的关系,使用接口和依赖关系建模这些关系。
(5)考量建模结果是否实现了组件的各个特性,对建模的结果进行细化。
案例(分析一个已经存在的系统)
画出下列描述的网上商城组件图:购物车、订单、库存、支付管理组件,使用组件图进行完善。
识别组件:购物车、订单、库存、支付管理
识别组件之间的关系通过一个现实的例子。
(1)在购买一件商品时,我们首先是浏览商品,了解商品详情。在商品详细页面上,我们可以看到一个“加入购物车”,点击之后,所浏览的商品即可加入我们的购物车。因此,购物车组件必须对外提供一个“加入购物车”的接口。
(2)当我们进入购物车查看购物车里的商品时,会看到页面里有一个商品数量的选项。在这里可以增加或减少商品的数量。但增加数量的上限不能超过该商品的库存,由此,可以知道购物车需要知道商品的库存信息,也即,库存组件必须给购物车提供一个“查询商品库存”的接口。在该页面中,还有一个“结算”的按钮,点击之后,我们会进入订单的页面。由此,订单组件必须对购物车提供一个“生成订单”的接口。
(3)进入订单页面后,可以看到有一个“提交订单”的按钮,点击之后进入支付管理的页面。由此,支付管理组件必须对订单组件提供一个“提交订单”的接口。
(4)提交订单之后,我们来到支付管理页面,在这里有一个“下一步”的按钮,根据我们网购的经验,可以知道点击之后我们会进入响应的网银支付系统。因此,支付管理组件需要支付系统提供一个支付的接口。
经过以上的分析,我们可以把组件及组件之间的联系用一个表来表示:


组件图
【说明】
参考材料:《UML面向对象建模基础》
最后笔者总结如下:
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/229651.html原文链接:https://javaforall.net
