如同C程序一样,写得很糟糕的C++程序可能会难以理解和维护。如果接口没有完全封装,则很难进行调整或者加强实现。糟糕的封装将会阻碍重用,也可能会导致可测试性方面的优势完全消失。
与流行的观点相反,从根本上说,面向对象程序最常见的形式比相对应的面向过程的程序更难测试和验证。通过虚函数改变内部行为的能力会使类不变量无效,这些类不变量对于纠正性能是必不可少的。而且,贯穿一个面向对象系统的控制流路径潜在数量可能会爆炸性地增大。
幸好,没有必要编写如此随意的、通用的(并且不可测试的)面向对象程序。我们可以将范型的使用限定在一个更易测试的子集中以获得可靠性。
当程序规模变得更大时,不同属性的效力就开始起作用。下面各节举例说明我们可能会遇到的一些问题的具体实例。