该篇文章是UML知识的扩充。
什么是组件图
源文连接:https://www.visual-paradigm.com/guide/uml-unified-modeling-language/what-is-component-diagram/
UML
组件图用于对面向对象系统的物理方面进行建模,这些面向对象系统用于可视化、指定和记录基于组件的系统,还用于通过正向和逆向工程构建可执行系统。组件图本质上关注系统组件的类图,这些组件通常用于对系统的静态实现视图进行建模。
一、组件图概览
组件图将正在开发的实际系统分解成为各种高级功能。每个组件负责整个系统内的一个明确目标,并且仅在需要知道的基础上与其他基本元素进行交互。
上面的示例显示了一个较大组件的内部组件:
- 数据(账户和验证ID)通过右侧的端口流入组件,并转换为内部组件可以使用的格式。右侧的接口称为必需接口,它表示组件执行其职责所需的服务。
- 重要的是注意内部组件被一个大”盒子”包裹,它可以是整个系统本身(在这种情况下,右上角不会有组件符号)或整个系统的子系统或组件(在这种情况下,”盒子”本身就是一个组件)。
二、组件图的基本概念
组件表示系统的模块化部分,它封装了其内容,并且其表现形式在其环境中是可替换的。在UML2
中,组件被绘制为一个矩形,并带有两个垂直堆叠的小矩形。UML2
中组件的高级抽象视图可以建模为:
- 带有组件名称的矩形
- 带有组件图标的矩形
- 带有原型文本和图标的矩形
三、接口
在下面的示例中显示了两种类型的组件接口:
提供的接口符号末尾有一个完整的圆圈,表示组件提供的接口–这个”棒棒糖”符号是接口分类器实现关系的简写。
末端只有半圆的必需接口符号(也称为套接字)表示组件需要的接口(在这两种情况下,接口的名称都放在接口符号本身附近)。
组件图示例-使用接口(订单系统)
四、子系统
子系统分类器是组件分类器的专用版本。因此,子系统符号元素继承了与组件符号元素相同的所有规则。唯一的区别是子系统符号元素具有subsystem,而不是component的关键字。
五、端口
端口使用沿系统或组件边缘的正方形表示。端口通常用于帮助公开组件所需和提供的接口。
六、组件关系
从图形上看,组件图是顶点和弧的集合,通常包含组件、接口和依赖关系、聚合、约束、继承、关联和实现关系。它还可能包含注释和约束。
6.1 关联关系
关联关系指定了类实例之间可能出现的语义关系。
它至少有两个由属性表示的端点,每个端点都与类相关联。关联的多个端点可能具有相同的类型。
6.2 组成关系
组成关系是一种强聚合的形式,它要求在一个组成关系中,它所包含的部件只要要被实例化一次。
如果组成关系的主体被删除,它的所有组成部分通常也会随之删除。
6.3 聚合关系
它是一种一段被标记成空心菱形的关联关系,这种聚合关系是弱”拥有”关系,即A对象可以包含B对象,但B对象不是A对象的一部分。
6.4 约束关系
以自然语言文本或机器可读语言表达得条件或限制,用于声明元素的某些语义。
6.5 依赖关系
依赖关系表示单个或一组模型元素需求其他模型元素来进行规范或实现。这意味着依赖元素的完整语义无论是在语义上还是结构上都依赖于提供方元素的定义。
6.6 继承关系
- 继承是更通用的类和更具体地类之间地分类关系。
- 具体的类的每个实例也是通用类的间接实例。
- 因此,具体的类继承了通用类的特征。
七、建模
7.1 源代码建模
- 通过正向或逆向工程,识别感兴趣的源代码文件集,并将它们建模为组件,原型为文件。
- 对于较大的系统,使用包来显示源代码文件组。
- 考虑公开一个标记值,指示源代码文件的版本号、其作者和上次更改日期等信息。使用工具来管理这个标记值。
- 使用依赖项对这些文件之间的编译依赖项进行建模。同样,使用工具来帮助生成和管理这些依赖项。
组件图示例——Java源代码
组件图示例-带有版本控制的C++代码
7.2 可执行版本建模
- 确定你要建模的组件集。通常,这将涉及位于一个节点上的部分或全部组件,或者这些组件集在系统中所有节点上的分布。
- 考虑这个集合中每个组件的原型。对于大多数系统,您会发现少量不同种类的组件(例如可执行文件、库、表、文件和文档)。您可以使用
UML
的可扩展机制为这些原型提供视觉提示(线索)。 - 对于该集合中的每个组件,请考虑其与其”邻居”的关系。大多数情况下,这将涉及由某些组件导出(实现)然后由其他组件导入(使用)的接口。如果要公开系统中的接口,请显示建模这些接口。如果您希望您的模型处于更高的抽象级别,请通过仅显示组件之间的依赖关系来消除这些关系。
7.3 为物理数据库建模
- 识别模型中代表逻辑数据库模式的类。
- 选择将这些类映射到表的策略。您还需要考虑数据库的物理分布。您的映射策略将收到您希望数据在已部署系统上的位置的影响。
- 要可视化、指定、构造和记录您的映射,请创建一个组件图,其中包含原型为表格的组件。
- 在可能的情况下,使用工具帮助您将逻辑设计转变为物理设计。