StupidBeauty
Read times:3543Posted at:Sat Aug 19 02:48:31 2017 - no title specified

《C++面向对象软件设计及构建》文章翻译:1.5组合/利用聚合实现组合,1.5 Composition/Composition Using Aggregation

聚合,也是一种 组合 。在这种形式中,整体是由多个部分组成,并且这些部分都被封装及隐藏起来,如下图所示。与关联不同的是,在聚合中,各个部分在外部是不可见的,在该组合的用户看来,它们并不具有身份标识,并且,它们不具有关联中各个部分所具有的那种程度的自治性。整体上就是单个可见的实体。由此,产生以下定义。

聚合

一种 组合 ,它将组合中的各个部分封装(隐藏)起来。

下图,聚合的结构,展示了,由聚合所定义的对象的一般模型。外层的对象,包含着内层(被封装的)子对象,而那些子对象自身可能也拥有隐藏的内部对象(子子对象)……


聚合的结构

聚合方式的组合,在我们所熟知的大量自然及人造系统中出现过。下表展示了,一些常见的系统与上图的结构之间的对应关系。

对象

子对象

子子对象

汽车

发动

活塞

电脑

主板

处理器芯片

分子

原子

夸克

对象的聚合,具体是这样创建的:让一个对象(即为整体)在其封装的数据中包含一个或多个其它对象(各个部分)。之前使用关联方式创建的简单的一秒超时的定时器,也可以使用聚合方式来实现,如下图所示。在这个图中,组成定时器的那些基本对象(ClockCounterTextBoxFrameStartStop),都被包含在其它的对象(TimedCounter、Display和ControlButtons)中,而那些对象呢,本身又被包含在一个单独的封装对象SimpleTimer 中。注意,从外部来看,只有SimpleTimer 是可见的;其它的对象,都被隐藏在SimpleTimer 对象的封装边界之内了。

通过聚合实现组合

聚合的一个好处就是,在使用外层对象的过程中,不需要关注内层的子对象是如何工作的,甚至都不需要关注它们是否存在。在驾驶汽车的时候,我们狠少会去关注组成汽车的那成千上万个部件是如何工作的。这种忽略对象的细微结构的能力,大大地简化了对系统工作原理进行理解的工作,也简化了构建以特定方式运行的系统的工作。聚合的另一个好处就是,可以改变内部的部件,而不影响用户对象外部整体的观察效果。各个部件的内部结构可以被完全改变,也可以只替换单个部件。对于效率、可靠性或成本的改进,都可能驱使对部件进行替换。

追逐

未知美人

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