StupidBeauty
Read times:3437Posted at:Fri Jul 21 01:13:27 2017 - no title specified

《C++面向对象软件设计及构建》文章翻译:1.5组合,1.5 Composition

组合,指的是,将单个复杂的系统看作是多个较简单系统累加起来的结果。通常用来研究及解释以下事物:复杂的人类组织(美国政府由三个大分支组成);复杂的生物系统(人体由呼吸系统、循环系统、免疫系统、神经系统、骨骼系统等系统组成);复杂的机器(航空器,由推进系统、控制系统、导航系统等系统组成);以及,复杂的程序(操作系统,由用户界面、文件系统、网络系统、内存管理系统等系统组成)。对于组合,重要之处在于,要理解各个单个(较简单)系统以及它们之间的关系或者合作方式。

组合,是一个建设性的活动,它指的是,将多个互相交互的组件搭配起来,形成一个整体。这种部分--整体之间的关系,是面向对象编程语言的基础概念,它是面向对象编程语言的其中一个首要目标。其具体实现方式是,使用新的方法来将已有的对象(部分)组合起来,以形成新的对象(整体)。 组合 可以看作软件开发 中的“乐高积木”,因为 ,它使用标准化的、专用的组件来构造 一系列广泛的有趣事物。

组合,其定义如下:

组合

将一组互相交互的组件组织起来,以产生某种一致的常见行为

这种部分-整体之间的关系,经常被表达为一种“有一个”关系。例如,在汽车与汽车挡风玻璃之间的关系中:“汽车拥有一个挡风玻璃”。

有两种不同形式的组合:关联( association (或称作相识(acquaintance)和聚合( aggregation (或称作容纳(containment))。这两种形式的组合是类似的,它们都是部分-整体关系的构造。聚合与关联之间的区别是,各个部件的可见性。在聚合关系中,只有整体是可见且可访问的。在关联关系中,各个交互部件都是可被外界看到的,并且,在实际情况中可能会在不同的组合关系中共享。饮料机,就是聚合关系的一个好例子,机器是一个整体,由多个内部部件(冷却系统、投币器、找零器,饮料制造组件)组成。这些内部组件,对于饮料机的普通用户来说是不可见的,也不可操作。电脑工作站,是关联式组合关系的一个好例子。工作站由键盘、鼠标、显示器、调制解调器和处理器组成。这些交互组件,对于用户来说都是可见的,并且可被用户直接操作。

在某些情况下,会使用更广义的术语“组合”,而不是更狭义的术语“关联”或“聚合”。出现这种情况,一般是因为,当时所说的话对于两种形式都有效,两种形式之间的区别并不重要,而重要的是要组成一个整体,或者是因为,组合的具体形式取决于上下文。

两种形式的组合都狠有用。聚合形式能够提供较好的安全性,因为,它的结构通常是预先定义好的,而无法在运行时改变。聚合形式组合的实现者,可以安心地做自己的实现,因为,该聚合关系的完整性和行为的正确性无法被通过直接干涉其内部机制的方式来破坏。关联关系,提供了较好的灵活性,因为, 各个可见部件之间的关系可在运行时重新定义。因此,在关联关系中,可以实现对它的执行环境中的变化性条件做出适应,具体做法就是,替换掉它的一个或多个组件。可根据具体需要来做出决策,采用哪种形式的组合,这个过程中要考虑安全性和运行期灵活性之间的平衡。

这两种形式的组合,经常会配套使用。之前,将电脑工作站作为一个例子,讲了鼠标、键盘、处理器、调制解调器和显示器之间的关联关系。然而,正如下图所示,电脑工作站中的处理器,本身是一个聚合关系的例子,由各个隐藏部件组成,包括:中央处理器(处理器芯片)、内存和硬盘。对处理器芯片做更详细的研究的话,会发现,它本身是更小的元素的关联关系组合,而其中的某些元素,可能又是由其它的关联关系或聚合关系组合而成。


关联和聚合

象还可能会拥有一个由多层关联关系和聚合关系形成的复杂结构。在关联关系和聚合关系的章节中,会举例说明这种结构。

未知美人

丽缇

Your opinions
Your name:Email:Website url:Opinion content: