本节书摘来自异步社区出版社《C++编程风格(修订版)》一书中的第2章,第2节,作者:【美】Tom Cargill,更多章节内容可以访问云栖社区“异步社区”公众号查看。
2 一致性
C++编程风格(修订版)
对于任何一个类,都可以从两个主要方面来进行观察:类的接口和类的实现。类的接口也 就是类的公有成员集合,它决定了这个类创建的对象能够为程序其他部分中的客户代码提供什么 样的服务。而类的实现则是完成了这些服务的功能,它们通常是作为类的私有成员被封装起来, 客户代码无法进行访问。在设计一个类时,程序员通常需要从这两个方面来进行考虑。接口必须 能够代表一致的抽象,而实现则必须使对象在行为上与这个抽象保持一致。本章将从接口和实现 这两个角度来讨论一致性的问题。
在任何时候,一个对象都是处于某种状态(State),这种状态是由对象中所有数据成员的值 来确定的。无论我们是通过类的外部接口,还是类的内部实现来观察一个对象时,状态对于理解 这个对象来说都是很关键的。我们可以通过接口将对象从一种状态驱动到另一种状态,从而满足 客户代码的需求。例如,通过将信息储存在表格对象中,客户代码可以任意改变表格的状态,使 其适应于随后的检索操作。而类的实现必须维持这个表格对象的状态,这样客户代码就能够从检 索操作中得到正确的结果。
接口和实现可以通过不同的模型来表示对象状态,这也分别被称之为逻辑状态和物理状态。 逻辑状态模型通常是物理状态模型的简化,多个物理状态可以对应于一个逻辑状态。例如,如果 表格对象对最近的检索结果进行缓冲以作为一种优化,那么在物理状态中就包含了这个缓冲,然 而,我们在公有接口中是看不见这个缓冲的,因为它并不属于逻辑状态。