有没有想过有一天我们的开发工作不是去分析什么对象的属性、什么是对象的方法,而是在已有的世界里组合我们需要的对象。。。。
采用OO中设计对象往往要从静态和动态的观点去抽象对象,从而产生对象的属性和方法,而且我们往往采用基本的数据类型来表示属性(暂且称之为平面属性)。可是在我们的现实世界里对象的表现形式却不是如此的,往往我们分析的平面属性又是由其他的对象构成的,这就产生了一个问题,纯粹的OO世界(我这里指的纯粹的OO世界意思就是面向构件的世界)是否存在呢?如果这样的世界存在的话,我们所抽象出来的对象都应该是由组合的形式构成的,而对象所表现出来的方法无非是这些组合的对象共同或者单独的行为。那麽,是不是说面向对象中的属性是错误的,或者说是根本不需要的?!
产生这样的问题的人不是我(我没有这样的思考过),而是我得一个朋友(某个公司的技术经理)。也许是受一些面向构件思想的洗脑,他希望构建出一种纯粹的构件世界,这样任何系统需要的构件都可以依靠组合而产生行为。-是不是听上去非常的清新脱俗?是呀,这样的话我们的系统设计就可以采用构件的形式,象搭积木一样的将系统搭建起来。就如同搭建房屋一样,我们需要的水泥、钢材、水、沙子、木头都是现成的构件,而我们要做的就是请一位设计师为我们设计房屋的构架,然后我们就可开始建造的过程了。
然而,这是不现实的,为什么呢?首先,它抛弃了OO中对象属性的概念,转而模拟现实世界里的组合产生对象的形式,可是我们都知道现实世界不可能等同于计算机世界,即使是用计算机来模拟现实世界也只能够是模拟而已,永远不可能完全的实现。而且,属性是对对象的概念的抽象,必然有它适用的场合,而不是根据某个特例(比如依靠组合产生了新的对象)就可以否定的。
这样看吧,如果这样的纯粹的OO世界存在(我们可以畅想着在这个世界里我们如何真正的快速开发系统),那么有没有想过这个OO的世界是如何产生的呢?即使象普元这样的企业"声明"自己已经进入到了面向构件的世界里,我并且在它模拟的面向构件的世界里开发(更确切的是组合)系统(但必然要遵守普元既定的的世界规则,比如你的组件实现某个接口),然而它的基础结构呢?难道它的基础结构还是纯粹的OO世界吗?显然,探究的多了就成了哲学的问题了(比如世界的产生,这谁都说不清楚的问题!),但可以想见的是它的基础结构必然还是完全的符合面向对象的思想的(这里的面向对象的思想意思是对象包括属性和方法)
既然我们无法说清楚世界的产生过程,也就不要否定属性存在的意义,当然了如果有人能够建立这样纯粹的OO世界,并且建立这样的规则,那时才可以说面向构件的时代到了。