UML 组合结构图是一种强大的结构图,用于探索内部架构一个结构化分类器(如类、组件或系统)的内部架构。它关注的是一个实体如何由相互连接的部件组成,以及它如何通过其端口.

该图对于定义系统组件的黑盒和白盒视图至关重要,确保边界清晰,并支持组件的可重用性。
核心结构与上下文
该图是在一个分类器(边界框)的上下文中绘制的,它定义了正在分析的整体系统或组件。
A. 分类器角色(边界)
- 符号表示:一个大的矩形框。
- 用途:表示正在定义其内部结构的整体类、组件或系统。图中的所有其他元素都包含在此边界内。
内部视图的基本元素
内部结构由三个关键元素定义:部件、端口和连接器。
B. 部件
部件表示分类器(如类或组件)的一个实例在整体组合结构中所扮演的角色。本质上,部件是一个内部构建块。
- 符号表示:边界内的一个矩形框,标注有其名称和类型。
- 语法:
部件名:部件类型(例如,dataCache: 缓存模块). - 关键区别: 一个部件并非对象本身,而是角色 该对象在其所属分类器上下文中的角色。一个部件本身也可以是一个复合结构,从而支持深层嵌套。
C. 端口
端口是复合结构(边界)与其环境之间,或其内部部件之间的独立交互点。端口明确了组件所使用或提供的接口。
- 符号表示: 一个附着在边界边缘或内部部件边缘的小方块。
- 端口类型:
- 公共端口: 附着在外部边界上;向环境暴露。
- 封装端口: 附着在内部部件上;仅连接该部件与其他内部部件或系统边界。
- 目的: 端口显式定义了所需的和提供的接口,使得内部结构可以被隐藏(黑箱视图),同时仍明确其合同性交互点。
D. 连接器
连接器用于建模两个元素之间的通信链路或信息/信号的流动(可以是两个端口、两个部件,或一个端口与一个部件之间)。
- 符号表示: 连接两个关联元素的一条线。
- 目的: 表示通信链路的实现,展示数据或消息在内部如何传输。
接口建模:提供与需要
接口定义了端口的合同义务,对于架构清晰性至关重要。
A. 提供的接口(棒棒糖符号)
- 符号表示: 一个连接到端口的圆圈(或“棒棒糖”)。
- 目的: 展示分类器(或部件)向其环境或内部组件提供的服务或操作。
B. 需要的接口(插座符号)
- 符号表示: 一个连接到端口的半圆(或“插座”)。
- 目的: 显示分类器(或部件)为正确运行而需要从其环境或其他内部组件获取的服务或操作。
装配连接器: 连接线通常将一个所需接口(插座) 部件连接到另一个部件的提供接口(棒棒糖),说明内部组件如何连接以实现系统功能。
建模协作:角色与协作
组合结构图还可以建模动态协作——一组特定的角色和连接,共同协作完成一项任务。
A. 协作使用
- 符号表示: 一个包含协作角色名称的虚线椭圆。
- 目的: 表示在更大组件内使用的协作模式实例(例如,特定的观察者模式实现)。
分步建模示例:智能家庭控制器
让我们建模一个家庭自动化系统 组件的内部结构。
- 分类器边界: 将外框定义为
家庭自动化系统. - 外部端口: 添加一个标记为
apiPort的端口到边界。附加一个提供接口(棒棒糖)用于ICommandReceiver(外部世界可以发送的内容)和一个必需接口(插座)用于IExternalWeatherService(系统所需的内容)。 - 内部部件:
调度器:TaskScheduler(处理定时事件)。设备管理器:DeviceCoordinator(与硬件通信)。
- 内部连接:
- 将
apiPort连接到deviceManager部件,使用连接器。 - 将
scheduler部件的输出端口连接到deviceManager部件的输入端口,表明调度器会告知设备管理器何时采取行动。
- 将
- 嵌套结构(可选):显示
deviceManager本身包含如zigbeeAdapter和wifiAdapter.
此图清楚地表明,家庭自动化系统由两个主要的内部部分组成,使用特定的API,并且需要外部天气服务才能运行。
摘要
该UML组合结构图超越了类或组件的黑箱视图,揭示了其白箱架构。通过使用部件来定义角色,端口来定义交互点,以及连接器来定义内部通信,使架构师和开发人员能够精确地理解和设计复杂、可重用且清晰封装的组件。
您可以在我们的UML资源中心.












