【问题标题】:Difference between a subsystem and a component子系统和组件之间的区别
【发布时间】:2025-11-30 08:25:02
【问题描述】:

我想问一下UML意义上的子系统和组件有什么区别?

【问题讨论】:

    标签: uml modeling


    【解决方案1】:

    我必须同意 Preet,但实际上,子系统大于组件。我将组件用于库(购买、掠夺或构建)和子系统,用于执行给定集成功能的整个系统的一部分。例如,在血液处理设备中,离心机驱动器和控制器将是一个组件。集成的抽血调节(包括安全机制、电机控制、用户控制和通信)将是一个子系统。

    【讨论】:

    • 我有一个问题:我正在构建一个 C++ SDK 并且我正在做一些 UML。我的 SDK 中的每个模块都尽可能地解耦,但模块之间存在依赖关系。有一个通用软件 API 和一个依赖于软件工具包的固件工具包。固件工具包 100% 绝对作为子系统与桌面分离,因为依赖性是单向的,并且它们在概念上被分离为硬件和软件子系统。 SDK 模块本身会成为子系统吗?对我来说,就像子系统将包含包一样接缝。
    【解决方案2】:

    在 UML 2.0 之前,我可以完美地将 <<subsystem>> 视为设计时 <<component>>,最终将成为 <<component>>。 UML 1.4 将组件定义为“系统的模块化、可部署和可替换部分,它封装实现并公开一组接口。组件通常由一个或多个分类器(例如,实现类) 驻留在其上,并且可以由一个或多个工件(例如,二进制文件、可执行文件或脚本文件)实现。"

    在将上述“模糊性”引入 UML(在 UML 2.0 中)之后,我更倾向于将<<subsystem>> 用作更大的<<component>>,并将它们视为系统的可替换和可重用的组成部分。

    【讨论】:

      【解决方案3】:

      来自IBM developerWorks - UML basics: The component diagram

      UML 2 规范相当模糊 关于子系统与 组件。规范不 对待任何组件或子系统 不同于建模 看法。与 UML 1.x 相比, 这种 UML 2 建模歧义是新的。 但这是有原因的。在 UML 1.x 中,一个 子系统被认为是一个包, 这个包符号是 让许多 UML 从业者感到困惑; 因此 UML 2 对齐的子系统作为 专门的组件,因为这是 大多数 UML 1.x 用户如何理解它。 这种变化确实引入了模糊性 进入画面,但这种模糊性 更多的是现实的反映 与 UML 2 中的错误相比 规范。

      总之没有

      【讨论】:

        【解决方案4】:

        在 UML 模型中,子系统是一种原型组件,代表系统中独立的行为单元。子系统用于类、组件和用例图中,以表示您正在建模的系统中的大型组件。

        您可以将整个系统建模为子系统的层次结构。您还可以通过指定子系统的接口和支持这些接口的操作来定义每个子系统所代表的行为。

        在图表中,隔间显示有关子系统的属性、操作、提供的接口、所需的接口、实现和内部结构的信息。

        通常,子系统有一个名称来描述其在系统中的内容和角色。

        如下图所示,子系统显示为包含子系统名称的矩形。它还包含关键字 «Subsystem» 和子系统图标。

        发件人:IBM Knowledge Center

        【讨论】: