物件组合与物件聚合在计算机科学中是将物件或数据类型结合成更复杂的方式。虽然对话中经常忽略了组合与聚合之间的区别,但这两者在实践中中的功能及意义至关重要。在看看 UML(统一建模语言)如何描绘这些隐秘关系之前,让我们深入了解它们的核心定义及差异。
物件组合是将物件合并到复合物件中的过程,确保每个物件的封装性,并使用它们明确的介面,而不显示其内部实现。
物件组合除了是物件导向程式设计的一个基础,还强调在合并物件的同时如何保持其封装性。相对于数据结构,物件组合更侧重于逻辑或概念的结构,而非实现的细节。而在项目中,物件组合除了包括对象本身,还可能体现成元素的数组或其他形式的集合。
在 UML 模型中,组合方式的描述取决于我们希望表现的物件之间的关系。以下四种方法是 UML 中用以描绘物件组合关系的主要工具:
在 UML 中,属性代表类别的特征,通常在类别的定义中以变数的形式呈现。这些属性帮助定义一个物件状态的主要特征,然而它们不构成复合关系。
关联代表类别之间的语义关系。它通常被表示为相关类别之间的一条实线。这种关系并不强烈,且可以是双向的,表示两者之间可以互相访问。
聚合是一种特定的关联,描绘整体与部分之间的联系,强调这是相对弱的“拥有关系”。
例如,假设一所大学拥有数个系部,而这些系部分别有许多教授。这里,系部与教授之间的关系是一种聚合,而大学则是一种排他的拥有关系。
组合是一种更强烈的聚合,它表示强烈的“拥有关系”。当组合物件被删除时,其所拥有的所有部分也一并被删除。
此类关系的例子可见于一个汽车(整体)与它的轮胎(部分)之间的关系。当汽车被销毁时,所有的轮胎也不再存在,显示出组合的一个核心属性。
用这些 UML 方法来描绘物件之间的关系,不仅有助于我们理解系统设计的逻辑,也让开发过程中的各个阶段有了明确的参考。当你在考虑如何使用这些工具来优化你的设计时,你有没有想过,物件之间的这些隐秘关系如何影响整个系统的稳定性与扩展性呢?