StupidBeauty
Read times:3469Posted at:Sat Jul 22 04:38:57 2017 - no title specified

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

关联,是一种部分-整体的组织关系。在这种关系中,整体是由各个部分以及各个部分之间的关系来定义的。在这种组合关系中,每个部分,都保持自己的独特性、外部可见性和自主性。这些部分,经营被称作节点、合作者或者相识者,这些术语,表达了,在这种部分-整体关系中,各个部分的独立性。在某些情况下,整体即是各个部分之和。由此,得到关联关系的以下定义。

关联

由独立构成且外部可见的不同部分组成的一个 组合

图所示,一个电脑工作站,即是真实世界中关于关联关系的一个典型示例。图中,每个部分,都是对于外界可见的,并且可以独立操作。“电脑工作站”,这个称谓,表达的是,将这些部分以某种形式组合起来,使得它们能够提供出一个电脑工作站所预期应当提供的功能。人们对于电脑工作站功能的预期,在错误的组合情况下就无法达成:只拿过少的部分来组合(例如,不提供显示器);或者,提供正确的部分,却未能正确地关联起来(例如,将鼠标连接到调制解调器上了)


真实世界中的关联关系

要创建不同对象之间的关联关系,其具体做法是,让其中一个对象中包含着对于其它对象的引用或指针。 以下示例, 示的是, 对象 间的关联关系。 在这个关联关系中,创建了一个时长为一秒的定时器,它被显示在一个图形用户界面的窗口中,并被一对开始( Start )和停止( Stop )按钮所控制。Clock 对象 其职责是,确定 每个长度为一秒钟的时间间隔的末尾时刻。每当 这样的时刻到来, Clock对象 就会调用Counter 对象的某个操作, 以增大其内部的某个值。 对 Counter 对象增大其值,就会导致, 它会将其值转换成一个字符串表示方式,并发送到TextBox 对象。Frame 对象 ,其职责是,维持TextBox 中的字符串值与用户界面上显示的字符之间的一致性。另外 Frame 还会显示两个按钮,其文字内容分别是 Start Stop ,用户 可通过这两个按钮来控制定时器是否要运行。


对象之间的关联关系

关联式组合关系,它的其中一个优点是,各个部分能够被不同的组合关系所共享。这狠容易做到,具体做法就是,让同一个对象被两个不同的对象所连接(指向),而那两个不同的对象位于两个不同的组合关系中。仍然拿之前所说的电脑工作站示例来说事,可以将同一个打印机在两个不同的电脑工作站之间共享。在一秒钟定时器那个示例中,可以让多个定时器显示在由同一个Frame 对象控制的同一个窗口中。下图中,展示了一个共享的Frame 对象。图中的虚线,是一个分割线,表明了,显示在同一个(共享的)用户界面窗口(Frame)中的两个不同的一秒钟定时器之间的逻辑分割关系。


关联关系中的共享对象

关联关系 的第二个优点是,关联关系中的各个部分可以动态改变,其具体做法狠简单,就是,让这个组合关系中的某个成员连接到(指向)另一个不同的对象。这种改变是动态的,因为,它可以在运行时进行。再次拿之前的电脑工作站示例说事,可以改变系统中所连接的键盘、鼠标或打印机。在一秒钟定时器示例中,可以将那个一秒钟的时钟替换成一个更快超时的时钟,以便更精确地进行时序控制。

未知美人

Semperoper

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