类设计的内在一致性,可以理解为“逻辑一致性”。所谓逻辑一致性,比如说,网络上流传甚广的“俗话说,俗话又说”系列,“宰相肚里”vs “有仇不报非君子”。
- (1)同一类内部;
- (2)继承关系的父类与子类之间。
一个类定义是一个整体,它描述了一种程序对象。类定义比较复杂,其中可以有许多成分,特别是可能定义了许多方法,每个方法定义是类定义中的一个独立片段,编程语言对不同方法之间的关系没有任何约束,也不对这样一组方法定义做任何相互关系上的检查。但是,作为同一个类定义的成分,这些方法需要相互协调,保持一致,才能保证所定义的程序有意义。这件事需要编程序的人考虑和保证。
以持有尾部节点的单链表为例,存在两种可能的设计,
- 1.要求在表空的时候,
_head
和_rear
的值都是None
- 2.只要求这时,
_head
为None
基于这两种设计都能正确地实现这个类,但是一旦选定了一种设计,类中的所有方法都必须遵照这种设计来定义,包括所有的插入和删除操作。
一般情况下,在设计一个类时总需要考虑一套统一的规则。类的初始化方法建立起的对象应满足这些规则,操作也不能破会规则,这样定义的类才是有效的。
当然不同规则可能影响类定义的细节和复杂程度,采用后一种设计更为简单,需要维护的关系少一点。还考虑到基类的已有设计,尽可能逾期保持一致,以便更多地利用已有的功能。