目前为止,程序的表现形式是对过程的叙述,顺序、分支、循环结构是最基本的原子形式。而面向过程的分析和设计无疑是最自然的框架结构,它将过程形式的代码段再次迭代的以过程形式组合,形成整个程序。就像将句子连成段,将段连成章,将章连成篇,将篇连成书。这也是最符合阅读者思维的形式,整个程序就像一个内含超链接的文本小说,主体上是流畅的,符合连续思维的。
面向对象程序不能说是颠覆性改变,它的原子表现形式仍然是顺序、分支和循环。而由于依赖于过程性系统的装载,其整体的最外层仍然是一个过程性的函数。它与面向过程在其表现形式上的不同,仅仅存在于中间层。
面向对象程序的表现形式是词条式的,至少是传记体的,而不是编年史。你可以想象,一部小说,作者首先把所有的故事按照角色重新归类,再分割为一个个小故事,可以想象是这样的:
——传记式:
《张三传》
张三,秦人,少年,虬髯黑脸,为人仗义。
逸事一:若傍晚时访之,必留宿,夜必邀相饮。三十三年春,李四自华阴来,……
《李四传》
李四,中原人,白脸壮年书生,十六岁举秀才。
逸事一:其人好游,某年遇张三……
——词条式:
醉酒: 张三与李四饮酒,大醉……
举秀才: 李四,十六时……
张三其人: 秦人,少年,虬髯黑脸,为人仗义……
巧遇: 三十三年,李四巧遇张三……
仗义好客: 张三好客,若傍晚时访之,必留宿,夜必邀相饮……
这种表现形式是某种词条式的分裂,故事被不断的片段化,一个比较好的面向对象程序一般会有大量的细粒度对象,对象的属性和方法都不多,方法都很短。虽然这种表现形式能解决一些过程性叙述的不足,但无疑过分的碎片化会带来理解上困难,传记式尚好,词条式就很难了。这就是面向对象程序在形式上出现的弱点。分析设计时,需时时脑中回想整体结构,以防偏离。而阅读维护时,需要把这些片段慢慢织起来,连成一个故事。
----------------------------------------------
将SICP的注脚240记在这里:
对象模型对世界的近似在于将其分割为独立的片断,函数式模型则不是沿着对象间的边界去做模块化,当“对象”之间不共享的状态远远大于它们所共享的状态时,对象模型就特别好用。这种对象观点失效的一个地方就是量子力学,在那里,将物体看作独立的粒子就会导致悖论和混乱。将对象观点与函数式观点合并可能与程序设计的关系不大,而是与基本认识论有关的论题。