面向对象,系统架构,设计模式,UML概念的澄清

其实从名词本身就可以看出来,面向对象是关于系统开发者的,而系统架构是关于系统的。

设计模式与UML都是面向对象领域内部的技术:设计模式是面向对象工作经验的沉积池,是一些比较常用或经典的在面向对象范式下进行设计工作后留下的遗产。是一种知识传承或者说总结。UML是面向对象领域中的一种很有效的表达工具。

架构研究的是系统的宏观结构。与面向对象的不同是,它是关于系统的知识。比如分层。其实所有的B/S或C/S结构系统都是分层结构。这也是为什么大多数人都能很容易理解并上手“分层架构”的原因,因为它太简单了。

最好的面向对象的方法就是使用规则引擎来开发系统。因为规则引擎是一个典型的领域建模系统。在很多规则引擎中甚至提供了通用或专用的领域建模语言即DSL。在这样的系统中使用除面向对象以外的任何思维都不可能,因此不得不“面向”对象。

面向对象当然不一定必须对领域建模。如果可能的话,或者说如果足够聪明的话,凭空设计出一套系统也不是不可能的。实际上,面向过程思想本身就是在把对象假设为功能体的情况下进行的。因此其实也可以把面向过程看作是面向对象的一个子集:因为它显然是一种被极大地局限了的编程思维------对象当然不只是功能。从认识论的意义上看,客观的对象可以也可能被“认识”为任何主观的“东西”。而正是面向对象使它成为可能。因为面向对象的中心思想是:丢掉主观,回到客观。面向对象通过去除主观将注意力重新集中到了对象本身。从这个意义上讲,面向对象相对于面向过程,非但不是一次进步,反而是一种退步?因为它所做的一切不过是丢掉了旧的东西,但却并没有引入任何新的东西?

面向对象之所以很难理解,原因就在这里。它太哲学了。以至于没有哲学基础的人很难进入它的大门。它就象是一座座落在高山上的神秘寺院,只有很少数的人才能真正得入,所有其它的人只能围绕在它的门外,远远地看看而已。

道德经有:天下万物生于有,有生于无。后世所谓“无中生有”的说法即来自这里。象很多其它说法最终都被扭曲一样,“无中生有”同样也从一个非常深刻的哲学陈述被扭曲成一种日常生活中的贬义。面向对象的核心其实就是这个逻辑:因为无中生有,所以先要有无。面向对象的目的就为了营造这个“无”。比如,在面向过程的范式中,因为一切都是面向功能的,所以其它的一切都无法生存。但使用了面向对象以后,因为它什么都不面向,反而变得什么都可以面向了。这就象碗里面装满了水所以装不下其它东西,把水倒掉后反而能装更多东西是一个道理:所有的儿童都必须经历这个阶段,然后学会使用任何的容器。

有了面向对象所营造的“无”,面向过程中的“功能”当然可以放进去,同样地,其它所有的东西都可以放进去。这就是面向对象的伟大之处---因为它可以“是”任何东西。并且,一旦认识改变或更新,因为“对象”仍然在那里,要修改或更新也是很容易的事情。这一点跟我们在现实世界中对客观对象的认识模式有点相似:一块废铁可能被认为是垃圾,也可能被认为是宝物,还可能被认为是别的任何事物,,,总之,只要作为一个客观事物它还存在那里,那么一切就都是可能的。面向对象虽然去除了认识中的主观印象如“垃圾”或“宝物”这样的东西,但是保留了事物的客观存在,因此才使得在上面的任何重新“认识”都变得可能。

在哲学上,面向对象一方面是一次非常成功的解构行为,一方面是一种很重要的认识论进步。认识当然是主观的,但这并不意味着我们必须从头到尾使用同一种认识观。实际上认识本身是一个反复辩证的过程。当然领域建模也可以实现反复辩证,因为所谓领域本身也是处在不断的重新定义中的。但是如果有可能的话,因为系统本身其实当然是带有一定的使命的,能抛弃领域式的建模,那其实意味着一场新的“就地解构”。因为面向对象本身就是为了这个目的诞生的---重构。面向对象是一场解构运动,而解构的最终目的都是为了重构。事实上,解构主义的核心从来就不在于简单地推翻旧系统或建立新系统,而是一种持续的“自我否定主义”。

它的工作原理是:先构建对象。然后再构建对它的认识。

这么做的好处是,借助于哲学,它将系统中的稳定部分与不稳定部分完全分开了:对象是其稳定部分,对它的认识是不稳定部分。这样的结果一方面非常吻合软件的生命周期,另一方面更吻合整个软件过程:开发与重构。其实重构过程本身即是一种对系统“对象”重新“认识”的过程。而重构对象显然正好对应初期构建的系统“对象”(从另一个角度的解释是主语,前文有从这个角度出发的提及)。

在这个意义上,解构主义可以说是人类认识观的加速器。因为不断重构的结果自然是不断产生新的“认识”。而根据工具主义或实用主义的观点,一切都是工具。那么这么做的结果自然就是,我们不断获得新的工具。

Great!? Or too much information?!...

但是人生的目的不就在于不断地折磨我们自己吗?文明不是本来就是折磨吗?真的吗?如果是折磨,我们为什么还会去做它们呢?所以肯定不是。

那到底“是”什么呢?

其实认识就是我们自己。我们自己就是认识。两者是一体的。比如,第一个证据:“我”是什么?它难道不是我们的认识吗?它难道不是“我”吗?既然它同时是一个认识,又同时是我,那么认识当然就是我,我当然也就是认识。

Right?

你可能感兴趣的:(面向对象,系统架构,设计模式,UML概念的澄清)