C++技术隐藏实现

在任何关系中,存在相关各方都遵从的边界是很重要的。当我们建立了一个库之后,我们就与该库的用户(也可以叫用户程序员)建立了一种关系,他是另外的程序员,但他需要用我们的库来编写一个应用程序或用我们的库来建立更大的库。

在C语言中,struct同其他数据结构一样,没有任何规则,用户可以在struct中做他们想做的任何事情,没有办法来强制任何特殊的行为。比如,initialize()函数和cleanup()函数的重要性,但用户有权决定是否调用它们。再比如,我们可能不愿意让用户去直接处理struct中的某些成员,但在C语言中没有任何方法可以阻止用户。一切都是暴露无遗的。

需要控制对结构成员的存取有两个理由:一是让用户避开一些他们不需要使用的工具,这些工具对数据类型内部的处理来说是必须的,但对用户特定问题的接口来说却不是必须的。这实际上是为用户提供了方便,因为他们可以很容易地知道,对他们来说哪些是重要的,哪些是可以忽略的。

二是设计者可以改变struct的内部实现,而不必担心对用户程序员产生影响。我们想以大块的方式来分配存储空间,提高速度,而不是在每次增加成员时调用malloc()函数来重新分配内存。如果这些库的接口部分与实现部分是清楚地分开的,并作了保护,那么我们只需要让用户重新连接一遍就可以了。