
复合结构图是添加到 UML 2.0 的新工件之一。复合结构图是一种
UML 结构图,它包含类、接口、包及其关系,并提供软件系统全部或部分的逻辑视图。它显示了结构化分类器或协作的内部结构(包括部件和连接器)。
复合结构图的作用与类图相似,但允许您更详细地描述多个类的内部结构并显示它们之间的交互。您可以以图形方式表示内部类和部件,并显示类之间和类内的关联。
复合结构图的用途•复合结构图允许用户“窥视”一个对象,以确切了解它的组成。
•一个类的内部动作,包括嵌套类之间的关系,可以详细说明。
•对象被定义为其他分类对象的组合。
复合结构图一览•复合结构图显示了类的内部部分。
•零件命名:partName:partType[multiplicity]
•聚合类是类的一部分,但部分不一定是类,部分是用于构成包含类的任何元素。
从类图中导出复合结构图网上商城
假设我们正在为在线商店建模一个系统。客户告诉我们,客户可以加入会员计划,该计划将为他们提供特别优惠和折扣运费,因此我们将客户对象扩展为提供会员和标准选项。
让我们使用类图为在线商店建模

我们有一个 Item 类,它可以由 Order 类聚合,Order 类由 Customer 类组成,而 Customer 类本身由 StoreManager 类组成。我们有很多对象最终会出现在其他对象中。
一切看起来都在 StoreManager 中结束,所以我们可以创建一个复合结构图来真正了解它是由什么组成的。
在上面的例子中,我们可以看到:•StoreManager 从它自己的角度来看,而不是整个系统。
•StoreManager 直接包含两种类型的对象(Customer和Item),如类图中的两个组合箭头所示。
•这里的复合结构图更明确地显示了包含 Customer 的子类型。
•请注意,这两个部分的类型都是 Customer,因为商店将两者都视为 Customer 对象。
•我们还看到了一个连接器,它显示了 Item 和 Order 之间的关系。
•Order 不直接包含在 StoreManager 类中,但我们可以显示与嵌套在它聚合的对象中的部分的关系。
类图与复合结构图问题:下面两张图表达的意思一样吗?
答:在类图中,描述和定价之间的引用是模棱两可的,严格来说,它们并不完全相同。
1.类图确实显示了 Description 将引用一个定价对象
2.但它没有明确指定两个对象之间的引用是否包含在项目内部

如果我们使用复合结构图,包含关联关系的含义是明确的。
•Description 和 Pricing 对象之间的引用包含在由 Item 组成的对象中。
•对象活动的具体实现可以清楚地建模。
外部零件参考我们已经看到了复合结构图如何出色地描述聚合的示例,但是您的模型还需要包含对您正在建模的类之外的对象的引用。
但是如何使用复合结构图来引用外部对象,如下例所示?

对外部对象的引用显示为带有虚线矩形的部分。
即使它们引用的对象在类之外,引用本身也在建模的类中,并且是展示其实现的重要步骤。
复合结构图的基本概念
UML 2.0 规范中确定的关键复合结构实体是结构化分类器、部件、端口、连接器和协作。
合作协作描述了协作部分(角色)的结构。协作通过协作使用附加到操作或分类器。当您只想定义完成特定协作目标所需的角色和连接时,可以使用协作。
例如,协作的目标可以是定义分类器的角色或组件。通过隔离主要角色,协作简化了结构并阐明了模型中的行为。
例子
在这个例子中,车轮和引擎是协作的部件,前轴和后轴是连接器。汽车是显示零件和零件之间连接的复合结构。
部分部件是表示包含结构化分类器拥有的一组一个或多个实例的图元素。一部分描述了实例在分类器中的作用。您可以在分类器的结构隔间以及多个 UML 图中(例如复合结构、类、对象、组件、部署和包图)中创建部件。
港口端口定义了分类器实例与其环境之间或分类器行为与其内部部件之间的交互点。
界面复合结构图支持所提供和所需接口的球窝符号。可以根据需要在图中显示或隐藏接口。
连接器表示模型中关系的线。当您对分类器的内部结构建模时,您可以使用连接器来指示部件或端口的两个或多个实例之间的链接。连接器定义绑定到同一结构化分类器中的角色的对象或实例之间的关系,并标识这些角色之间的通信。产品会自动指定要创建的连接器类型。
复合结构图示例 - 计算机系统让我们为计算机系统开发复合结构图,其中包括以下组件列表:
•电源装置 (PSU)
•硬盘驱动器 (HDD)
•主板 (MB)
•光驱 (DVD-RW)
•内存模块 (MM)
我们暂时假设主板是内置声卡和显示适配器的类型: