重用对象

任何对象模型的一个重要目标是使对象创作者能够重用和扩展其他人作为其自身实现的片段提供的对象。 在 Microsoft Visual C++ 和其他语言中执行此操作的一种方法是使用实现继承,允许对象从另一个对象继承其某些函数(“子类”),同时替代其他函数。

使用传统实现继承进行系统范围内对象交互的问题是,未明确定义实现层次结构中对象之间的协定(接口)。 实际上隐式且不明确。 当父对象或子对象更改其实现时,相关组件的行为可能未定义或无法稳定实现。 在任何单个应用程序中,实现都可以由同时更新所有组件的单个工程团队管理,这并不总是一个主要问题。 当一个团队通过黑盒重用其他团队构建的其他组件构建组件时,这种不稳定会危及重用。 此外,实现继承通常仅在进程边界内工作。 由此可见,对于由许多工程团队构建的软件组件组成的不断改进的大型系统,传统的实现继承是不切实际的。

构建可重用组件的关键是能够将对象视为不透明盒子。 这意味着尝试重用另一个对象的代码片段对正在使用的组件的内部结构或实现一无所知,并且不需要知道任何内容。 换句话说,尝试重用组件的代码取决于对象的行为,而不是其确切实现。

为了实现黑盒可重用性,COM 采用其他既有的可重用性机制,例如包含/委派聚合

注意

为方便起见,要重用的对象称为内部对象,使用该内部对象的对象是外部对象

 

请务必记住这两种机制中客户端显示外部对象的方式。 就客户端而言,这两个对象都实现客户端可以获取指针的任何接口。 客户端将外部对象视为不透明盒子,因此不关心也不需要关心外部对象的内部结构,客户端只关心行为。

有关详情,请参阅以下主题: