论面向组合子程序设计方法 之三 失乐园 之补充

失乐园发了之后。有的朋友对“OO是一种自顶向下的方法论”的论述有些疑问。

这里补充一下。

如果认可OO是一个责任分配体系,那么自顶向下就是一个自然的逻辑结论。

没有分析出来“需求”,也就无所谓“责任”,于是根本就无所谓“OO”了。

这种从分析需求,分解需求,分配责任,再分析子需求,分解子需求,在子模块内分配责任的方式,被我称为“自顶向下”。

至于说xp, tdd和自顶向下是不矛盾的。它们也都是要依赖于需求分析的。test case是什么?不就是需求么? 当然,这些方法论并不要求需求百分之百的细化,它们认可变化,拥抱变化,力求变化时的代价最小。不过,不管怎么说,它们仍然是要着眼于当前的需求的,应对需求变化的能力是另外一个话题,它并不能表示这些方法论不是自顶向下。

“自底向上”确实古已有之,PO时代也确实有这个提法。但是,它的缺乏方向性,缺乏重用能力,缺乏整体组织等等弊病让它从来都没有成为设计的主流,没有成为一个主导整体或者部分设计的思想。 最多算是公有制体制内的私有制补充而已。PO时代它的地位就不高,到了OO时代,强调职责分配,它更是几乎沦为一个历史词汇了。

也许你会说,我在调用xcerces, stl的时候,难道也是自顶向下?我可从来没有给stl的作者分配过责任啊。

这其实和责任分配并不矛盾。中间如果发现可以重用的模块,只要这个模块向外承诺的责任符合我的期望,我就可以用。仍然是自顶向下,需求驱动,责任驱动。 而且,xcerces这些库设计的时候,也一样要假想一下需求,然后从需求出发的。(stl不是很一样,它一定程度上有CO的影子,从基本组合子逐渐演绎的方法在其中也有体现,比如那个iterator和所有围绕iterator的算法等)