面向对象的最终目的仍然是功能。面向对象只是作为一种灵活性更强的构建手段存在于需求分析与设计领域的。
那么,到底要如何在对象的基础上实现功能的灵活更变即系统的灵活性就成了一个避免不了的问题。
答案就是参数化。
在网上稍作搜罗之后发现,没有任何与软件设计相关的参数化方案。所有的参数化方案或讨论都是集中于建筑或三维建模上面的。
这是另一个鸿沟。
为什么呢?因为我如果构建一个游戏系统,没有参数化的方案的话,很多东西就将全被HARDCODED。但是HARDCODING显然与软件本身的进化性质是不相符合的。姑且不讨论软件的自治进化能力,即使是人工进化能力,在HARDCODING的情况下也是不可能的。
这不是鸿沟是什么?进化显然是软件本身的一种属性,但是在一个没有参数化的系统中,进化没有办法通过一种结构化的手段进行表达而只能通过全面推翻的方法达到目的,显然不是一种真正的进化。因为真正的进化具有两种形式:突变与选择。
而对于一个并不具有群体特征的事物如“软件”来说,“选择”显然是在讨论范围以外的东西。至少在现阶段,大部分的商业软件件开发并不是使用这种方法完成的。也许有些AI程序使用这种方法进行软件开发。但一旦把它放到应用级的软件范围中,组合爆炸的问题就开始浮现出来。所以它不可能。
因此个体软件的进化只能是突变。但是突变的发生要求软件必须具有一定的结构。因为突变意味着结构的突变。并不是整体的推翻。不是整体推翻的一个原因前面已经叙述过,另一个原因则是其成本太高。而这个原因正是也是我们选择使用对象或概念作为软件构建的基础而不是功能作为其基础的原因。我们希望通过使用在人类知识系统中处于更低层次的对象或概念这样的东西建立系统的可进化性或者说灵活性并以此降低软件开发在维护阶段的成本。
由此可见,面向对象或概念的方法,与对软件“突变”能力的要求是高度一致的。
不足的是,光有面向对象是不够的。因为虽然面向对象是构建可进化能力的基础,但光从这个基础出发,如果没有正确的方法仍然不可能真正构建出具有很强进化能力的系统。
要构建具有很强进化能力的系统,就必须构建具有很强进化能力的系统。也就是说,只有你构建出了这样的系统,你才能拥有这样的系统。而构建这种系统的方法即是参数化或者说元素化。
这种系统仍然拥有一定的结构,不过这种结构与传统意义上的结构是不同的。它是一种兼具本体论与认识论意义上的结构。它的本体论特征使它区别于传统意义上的结构。而它的认识论特征则使它具有被赋予主观认识即参数化意义的可能。
事实上,参数本身即是人类认识论的一个部分。它是唯物主义世界观的一个重要组成部分。因为唯物主义世界观本身就是在把事物看作是独立的,分离的个体的基础上建立起来的。参数作为一个支撑整个唯物主义大厦的思想元素,在唯物主义认识过程中起着至关重要的作用。甚至可以说,没有参数,任何唯物主义的概念都是不可能建立的。
所以它不但不是我们将它应用在对象世界的障碍,恰好相反,它在软件系统中的存在,是将唯物主义世界观移植到计算机世界的必要步骤。没有它,要在面向对象的系统中建立唯物主义世界观是很困难的。
而这正是软件开发中最大的困难之一。也是人们之所以在面向对象的开发中,大多数人都不自觉地又重新转向功能性道路的根本原因。因为认识论在这里缺位了。认识论缺位的结果便是急功近利,飞蛾扑火。系统走向一条非逻辑化而是功能化的道路。
欲速则不达。
面向对象的思想在西方之所以能够星火燎原的原因是,他们不象我们这么急功近利。他们有着优秀的学术传统。中国却是一个商业味极其浓厚以至太浓厚了的国度。尽管西方一直在承认中国的市场经济的态度上扭扭捏捏,但经济归经济,态度归态度。我们虽然在宏观上还算不上是市场经济,但实际上在微观上早就超越或者说一步到位了。这其实也正是中国经济在一个极其强大的中央政府的存在条件下,仍然欣欣向荣地向前发展的一个因素:中国人实在是太缺钱了。
飞蛾扑火的工作方法带来的显然是后遗症。并且这样的后遗症并不止存在于软件领域。它存在于全国的各个生产领域。但是此文不讨论经济,所以略过。