该篇文章是UML知识的扩充。
什么是复合结构图
复合结构图是添加到UML2.0
中的新项目之一。复合结构图是一种UML
结构图,它包含类、接口、包及其关系,并提供全部或部分软件系统的逻辑视图。它显示结构化类图或协作的内部结构(包括组件和连接器)。
复合结构图的作用与类图类似,但允许您进一步详细说明描述多个类的内部结构并显示它们之间的交互。您可以以图形方式表示内部类和组件,并显示类之间和类内的关联。
一、复合结构图的用途
- 复合结构图允许用户”窥视”对象内部,以准确查看它由什么组成。
- 可以详细描述类的内部操作,包括嵌套类的关系。
- 对象定义为其他类对象的组合。
二、复合结构图概览
- 复合结构图显示类的内部部分。
- 组件的名称定义为:组件名称:组件类型[多重性]
- 聚合类是类的一部分,但组件不一定是类,组件是用于组成包含类的任何元素。
三、从类图派生复合结构图
网上商店
假设我们正在为在线商店建模系统。客户告诉我们,客户可以加入会员计划,该计划将为他们提供特别优惠和折扣运费,因此我们扩展了客户对象以提供会员和标准选项。
让我们使用类图对在线商店进行建模
我们有一个Item类,它可能由Order类聚合,该类由Customer类组成,而Customer类本身由StoreManager类组成。我们有很多对象最终位于其他对象中,所有内容看起来都像是最终在StoreManager中结束的。因此我们可以创建一个复合结构图来真正了解它是有什么构成的。
在上面的例子中,我们可以看到:
- StoreManager从它自己的角度来看,而不是整个系统。
- StoreManager直接包含两种类型的对象(客户和项目),如类图上的两个组合箭头所示。
- 此处的复合结构图更明确地显示地是包含”客户”的子类型。
- 请注意,这两个部分的类型都是”客户”,因为商店将两者都视为”客户”对象。
- 我们还看到一个显示”项目”和”订单”之间关系的连接器。
- Order不直接包含在StoreManager类中,但我们可以显示嵌套在它所聚合的对象中的部件之间的关系。
四、类图与复合结构图
问:下面的两张图表达了相同的含义吗?
答:在类图中,”描述”和”定价”之间的引用是模棱两可的,严格来说,它们并不完全相同。
1.类图明确显示,”描述”对象将引用”价格”对象。
2.但它没有指定两个对象之间的引用是否显示包含在项中。
如果我们使用复合结构图,则包含关联关系的含义是明确的。
- “描述”和”价格”对象之间的引用包含在由Item组合的对象中。
- 可以清楚地对对象活动地特定实现进行建模。
五、对外部组件的引用
我们已经看到了复合结构图如何擅长描述聚合的示例,但您的模型还需要包含对正在建模的类之外的对象的引用。但是,使用复合结构图引用外部对象(如下面的示例)怎么样?
- 对外部对象的引用,使用带有虚线矩形的部件进行表示。
- 即使它们引用对象在类之外,引用本身也在建模类中,并且是显示其实现的重要步骤。
六、复合结构图的概念
UML2.0
规范中标识的复合结构图的关键是结构化类、组件、端口、连接器和协作。
协作
协作藐视了协作组件(角色)的结构。协作通过协作使用附加到操作或类。当您只想定义完成协作的特定目标所需的角色和连接时,可以使用协作。
例如,协作的目标可以是定义类的角色或组件。通过隔离主要角色,协助做简化了结构并阐明了模型中的行为。
在此示例中,车轮和发动机是协作部件,前桥和后轴是连接器。汽车时显示零件和零件之间连接的复合结构。
组件
组件是一个关系图元素,它表示包含结构化类的一个或多个实例的集合。组件描述实例在类中的角色。您可以在类的结构间隔中以及在多个UML
关系图(如复合结构图、类图、对象图、组件图、部署图和包图)中创建组件。
端口
端口定义类实例与其环境之间或类的行为与其内部部分之间的交互点。
接口
复合结构图支持提供和所需接口的球套字表示法。可以根据需要在关系图中显示或隐藏接口。
连接器
表示模型中关系的线。对类的内部结构进行建模时,可以使用连接器来只是组件或端口的两个或多个实例之间的链接。连接器定义绑定到同一结构化类中的角色的对象或实例之间的关系,并标识这些角色之间的通信。产品会自动指定要创建的连接器类型。
七、复合结构图示例
计算机系统
让我们为计算机系统开发复合结构图,其中包括一下组件列表:
- 电源单元
- 硬盘驱动器(硬盘)
- 主板(MB)
- 光驱(DVD-RW)
- 内存模块(MM)
我们暂时假设主板是内置声卡和显示适配器的类型: