UML _ 组件图/构件图
概述
组件(Component/构件)
定义
组件(Component/构件)是系统设计的一个模块化部分,并对外提供了一组接口。
组件是一个独立的封装单位(封装性) ,是系统中可替换的物理单元(替换性),需要遵循并提供一组接口的实现。
组件与接口
接口(Interface)
是一组操作的集合,它指明了由类或组件所请求或者所提供的服务。
组件(Component)
是系统中可替换的物理部分,它遵循并提供了一组接口的实现。
特点
-
模块化
经常将多个相关的类和对象组织成一个组件。 -
组件作为系统中的一个物理实现单元,通常对应于一个实现性文件
包括软件代码(源代码、二进制代码、可执行文件等)或相应组成部分(脚本、命令行文件等)
带有身份标识并有物理实体的文件(运行时的对象、动态链接库、数据库等) 。 -
组件作为系统中封装完好、定义良好接口的物理实现单元,它能够不直接依赖于其他组件而仅仅依赖于组件所支持的接口。
分类
按照组件在系统中的角色分类:
-
部署组件(Deployment Component) :组成可执行系统的必要组件。
例如Java虚拟机、数据库管理系统、EXE文件、DLL文件。 -
工作产品组件(Work Product Component) :开发过程的中间产物,不直接参与到可执行系统中。
例如源代码文件、数据文件。 -
执行组件(Execution Component):在运行时创建的组件,
不常见
。
例如实例化的Servlets、COM+对象、XML文档。
组件图(构件图)
定义
组件图是用来表示系统中组件与组件之间、组件与接口之间关系的模型图。
作用
- 使系统测试人员和开发人员能够从整体上了解系统的所有物理部件;
- 从软件架构的角度来描述一个系统的主要功能;
- 方便项目组的成员了解系统的结构和功能;
- 有利于软件复用。
与类图区别
-
类表示是对实体的抽象,而构件是对存在于计算机中的物理部件的抽象。
也就是说,构件是可以部署 的,而类不能部署。 -
构件属于软件模块,而非逻辑模块,与类相比,它们处于不同的抽象级别。
甚至可以说,构件就是由一组类通过协作完成的。 -
类可以直接拥有操作和属性,而构件仅拥有可以通过其接口访问的操作。
软件复用(SoftWare Reuse)
软件复用(SoftWare Reuse)是将已有软件的各种有关知识用于建立新的软件,以缩减软件开发和维护的花费。软件复用是提高软件生产力和质量的一种重要技术。
复用级别:
- 代码的复用
- 设计的复用
- 分析的复用
- 测试信息的复用。
早期的软件复用主要是代码级复用,被复用的知识专指程序,后来扩大到包括领域知识、开发经验、设计决定、体系结构、需求、设计、代码和文档等一切有关方面。
软件复用的主要思想:
将软件看成是由不同功能部分的“组件”所组成的有机体,每一个组件在设计编写时可以被设计成完成同类工作的通用工具,这样编写特定软件的工作就变成了将各种不同组件组织连接起来的简单问题。
组件图的组成
基本组成元素——构件(组件)+ 接口 + 关系(依赖和实现)
详细组成元素——构件 + 接口 + 关系 + 端口(Port) + 连接器(Connector)
组件图的常用组成
- 组件
- 接口
- 关系(依赖、实现)
组件与接口
组件组成
- 接口
- 接口实现
接口
接口是一组用于描述类或组件的某个服务的操作。
表示:
组件:
在组件图中,组件可以通过其他组件的接口来使用其他组件中定义的操作。
表示方法:
没有标识接口的组件表示法
标识接口的组件表示法
有3种:
- 使用接口分栏表示
- 使用图标表示 (常用)
- 显示表示法
构件常用构造型:
-
《executable》,可执行构件(编译的结果,可投入运行),如exe文件。
-
《library》,库构件(类库、动态链接库等),如dll文件。
-
《database》,表示可执行文件访问的数据库构件,如mdb、mdf文件。
关系
关系有两种:
-
组件间:依赖关系
-
组件与接口之间:依赖、实现
组件间的依赖关系
一个组件如果使用另外一个组件的操作,则可以在该组件和另外一个组件的接口间建立依赖关系。
使用场景:
-
两个组件中的类如果存在泛化关系,则组件间可以加依赖。
-
两个组件中的类如果存在使用(依赖或关联)关系,则组件间可以加依赖。
注意:
- 组件之间的关系(通常)通过接口实现。
- 如果被依赖接口无法正常运行, 那么该构件也无法运行。
组件与接口的关系——依赖、实现
构件实现主要用于定义构件, 这些构件根据提供接口和所需 接口来实现构件提供的契约。
详细组成元素
详细组成元素——构件 + 接口 + 关系 + 端口(Port) + 连接器(Connector)
端口(Port)
uml2.0引入的概念
端口指定了构件上的一个交互点,通过该交互点,构件可以与环境、其他构件或其内部构件进行通信。
端口是一个封装构件所显示的对外窗口,所有进出构件的交互都要通过端口。
端口可以理解为构件的入口与出口,供给接口和需求接口都附着到端口上。
注意:
-
端口无法独立存在,必须依附于组件
-
简单端口是具有一个需求或供给接口的端口;而一个复杂端口,有几个需求或供给接口。
-
端口可以有标识(名字),能够通过一个特定端口与一个构件通信。
-
通信完全是通过由端口支持的接口来描述的。
表示:
端口被表示为跨立于构件边界上的小方块,每个端口都可以有一个名字。
连接器(Connector)
不常用
构件与构件之间通过端口连接,而端口与端口之间通过连接器连接 。
端口与端口之间通过连接器(连接件)连接,连接器有多种形式:
- 直接连接器
- 接口连接器
- 委派连接器(内部端口与外部端口)
组件图的分类
-
简单组件图
将相互协作的类,组织成一个组件。
-
嵌套组件图
使用嵌套的组件图来表示组件的内部结构。
(图中命名有问题)
组件图的应用及建模过程
简单组件图的创建
-
根据用例或场景的确定需求,确定系统的组件。
-
将系统中的类、接口等逻辑元素映射到组件中。
-
确定组件之间的依赖关系,并对组件进行细化。
组件图的绘制
-
创建组件图
在Development View下面 -
创建和设置组件
-
创建组件之间的依赖关系
构建之间的关系一般通过接口实现。 -
创建组件、与接口的实现及依赖关系
-
创建端口和连接器(可选)
对系统建模
嵌套组件图的创建
- 确定子系统对外的接口
- 确定子组件和接口
例子:
确定子系统对外的接口
确定子组件和接口
(图中名字有问题:构件名字尽量不要出现接口)
对用例建模
使用下列的步骤创建组件图:
(1)根据用例或场景的确定需求,确定系统的组件。
(2)将系统中的类、接口等逻辑元素映射到组件中。
(3)确定组件之间的依赖关系,并对组件进行细化。
例子
根据用例或场景的确定需求,确定系统的组件。
确定系统组件
将系统中的类和接口等映射到组件中
确定组件的依赖关系
对可执行程序的结构建模
可以清晰地表示出各个可执行文件、链接库、数据库、帮助文件和资源文件等其他可运行的物理组件之间的关系。
建模策略:
- 标识要建模的组件
- 理解和标识每个组件的类型、接口和作用
- 标识组件间的关系
有一个语音呼叫中心程序callcenter.exe,使用了三汇公司的语音卡的驱动程序shp_a3.dll,以及相应的TTS(文本转语音)引擎sh_ttsu.dll
对源代码建模
清晰地表示出软件所有源文件之间的关系。
建模策略:
-
识别出感兴趣的相关源代码文件的集合,并把它们建模为组件;
-
对于较大的系统,利用包来进行分组;
-
通过约束来表示源代码的版本号、作者和最后修改日期等信息;
-
用依赖关系来表示这些文件间编译的依赖关系。
本章重点
①了解组件图的基本概念及作用
②熟悉组件的分类情况
③掌握组件的表示方法
④掌握组件间、组件与接口间的关系
⑤熟悉组件图的分类
⑥熟悉组件图的建模过程,并掌握组件图的基本应用