未封装意味着不可改变?

Suh*_*pta 4 c++ oop encapsulation public

我在Effective C++中遇到过这一行:

公共意味着未封装,实际上,未封装意味着不可更改,特别是对于广泛使用的类.广泛使用的类最需要封装,因为它们最能从更好地替换一个实现的能力中受益一

作者的意思是"公共意味着未被封装,实际上,未封装意味着不可改变"?

未封装的如何不可改变?

Nic*_*las 7

一般的想法很简单.如果你公开一些东西,那么有人可以并且可能会使用它.因此,如果您更改了公共内容,则所有使用它的代码都会立即中断.打破人们的代码很糟糕; 它往往导致他们不再想要使用你的代码,因为现在你已经强迫他们重写所有的东西只是因为你想使用不同的类型或东西.

公共接口是类的实现与其用户之间的契约.改变合同,特别是没有提前通知,被认为是非常粗鲁的.

如果你的所有代码都是内部的,那很好.但如果不是,如果你正在为其他人创建一个图书馆(无论是在本地还是仅仅是出售图书馆),那么人们就不太可能对界面变化感到高兴.

这不是C++规则的问题; 这只是界面设计规则的问题.由于公共事物是界面的一部分,因此您必须小心您公开的内容.