对于服务器端的程序,很多对象都活在空气中。

引入STRUTS以后,用户的“ACTION”都得到了适当的形式化,但也只是用户的“ACTION”,其它所有东西,比如说用户本身,就没有被形式化。
整个程序中都没有用户,没有用户的影子。有些程序可能为已经登录后的用户设置一些会话对象,但也只是用于有操作的或者说服从于操作的对象。这样的对象,是为了对象而对象,不是真正的对象。
真正的对象必须在设计一开始就存在于程序里面。
PICTURE一下真实的业务场景,其实一切对象都喷薄而出。如果使用ONTOLOGY的描述方法,会更直接地看到这种结果。但是一般的系统分析不是这样的:一般的系统分析是,先问客户要什么,然后把它们转换成功能并写进需求。然后说这是功能需求。
根据功能需求写程序的,不是面向对象。是面向过程的。或者说面向功能的。根据此构建而成的系统也不是一个面向对象的系统,而是一个功能的集合体。这便是为什么很多程序很难维护的根本原因:因为功能式构建是高耦合的。而只有面向对象才是低耦合的。
另一种看法是,面向对象中的对象也可以被看成是某种功能集合体。你可以这么看,至少这样,它实现了一定程度上的主体哲学。是一个自然的系统,而不是一堆如操作系统代码般的,只有“天才”才看得懂的东西。这样的东西,放在企业里面肯定不是一件好事,它基本上不具有任何重用性或任何其它可用性。它不具有持续“发展”的能力。
这样的系统,如果一定要发展的话,到最后的结果其实也很自然:它就是面向对象。当你做的东西越来越多的时候,系统看起来就像是一堆垃圾,你肯定会想把它们管理起来。这时的手段便是面向对象。
这是走向面向对象的自然发展途径。但为什么我们要学习面向对象,却不是为了在犯了一堆错误并且生成了一大堆不可能管理的代码以后重新收拾那个烂瘫子。因为那是浪费,而让你去学习面向对象,目的就是为了避免犯那样的错误。
我们不可能一切都任其自然发展。因为自然的并不一定是好的。如果自然就是好,那么现代化就不可能存在。自然有自然的好处,现代化有现代化的好处。乱摊子有乱摊子的好处,OO有OO的好处。你不OO,就不可能得到OO的好处。当然你没有乱摊子,也就享受不到拥 有一个乱摊子的好处啦!这也是自然(的)。
此文的中心思想是,既然要做面向对象,就不要把对象放在空气中。要把对象放在系统中。只有这样,你才能够:
一,有一个真正由对象组成的系统而不是处于被动的为功能服务而存在的以二等公民的形式存在于系统中的傀僵对象;
二,有一个真正的对象系统。前者指形式意义上的对象系统,这里指真正的语义上的对象系统。因为形式是基础,形式是语义的承载体,有了形式才可能有语义,由此才可能有一个真正面向“对象”的语义级描述系统。且系统也因此才可能具供相应的服务能力:向开发者提供相应的语义描述能力。
不要把对象放在你的大脑中,放在你的大脑中就等于放在空气中。最少对公司来说是这样,你大脑中的东西,当然是公司的资产没错,但是这种保管形式不太好。并且除此以上,对象的意义还在于形式化的SERVE。它就象数学符号一样,你知道跟写出来是不一样的。写出来以后它一方面提供一个更好的思维启发点,另一方面它自己可以构建一个工作系统:一个由符号组成的系统。
关于形式化的好处跟理论,可以参看数学形式主义的历史或相关形式理论。如数理逻辑,形式逻辑,。。。总之,关于形式化的理论这里就不讨论了,你只要知道一件事就够了:形式化很好,非常好。如果没有形式化,现在的文字都成问题。
形式化很好,抽象很好。
所以,不要把你的对象放在空气中。