论坛首页 Java企业应用论坛

敲响OO时代的丧钟!——DJ对于数据持久化的支持(3)

浏览 192819 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2005-08-04  
庄表伟 写道
to:厌倦发呆
:D
太巧合了,我打算引入的event,的确包含两种event,只是用什么关键字,我还没有想好,所以也没有写出来。

也许叫asyn  event作为异步事件,sync event作为同步事件,其中sync可以省略。

对于一个希望接收与处理事件的channel来说,他在声明event的时候,就可以决定这个事件他是否需要同步的处理。

也就是说:当一个事件A发生,需要触发ChannelB中的处理函数,之后当处理函数完成,A事件才可以继续,或者才算完成,这算是同步事件。

当一个事件A发生,无论ChannelB中的处理函数什么时候处理,A事件都可以继续的,就算是异步事件。

你看是不是和你说的AgentOP非常类似?



事件处理的同步与否与事件接收者无关,事件发起者愿意等待,则是同步事件,不愿意等待,则是异步事件,如果遵照这个同步/异步事件的定义,在Agent的世界中并没有同步/异步的说法,或者说,完全是异步的。对于接收者而言,知道发起者是否是在等待,可以作为判断事件处理优先程度的一个考虑因素。
粗浅的说,可以把Agent看作是人。一个人有各种各样的能力,既有主动的,也有事件处理性质的。即便看起来是需要同步的动作,比如A到银行去存款,B作为前台服务人员,此时,A在等待B的处理结果,如果从这一点来看,这个操作是一个同步操作。但是,从更大的范围来看,就不算是同步的,比如此时A仍然可以接听手机,和边上的人聊天,等等。存款这个动作,只是对A的某一方面的处理能力作了约束。如果对银行足够信任,甚至可以在服务人员点钞的同时去上个厕所,或者留下一个地址让银行把回执寄送回来,人直接去办别的事情。从某个意义上来说,前面那种类型的同步只是当初的单CPU系统遗留过来的一个做法,只不过习惯了以后,倒是成了最自然的存在了,以有限资源共享为主的同步也可以归为这一类。
真正必须的同步主要存在于另一种场景,比如一个桌子两个Agent同时用力才能搬动,如果两个Agent协商好了要搬桌子,就必须以某种方式同步他们的动作。这一点,使用交叠式并发语义是很难用自然的方法解释的。但是一般的软件开发都不会碰到这种需求(自控领域除外)。
0 请登录后投票
   发表时间:2005-08-05  
新语言的威力(1)

http://spaces.msn.com/members/zbw25/Blog/cns!1pA6-3FOo9yNp_4lmEHxdDqA!366.entry
0 请登录后投票
   发表时间:2005-08-05  
就我到目前的理解, 作者对于OO的批判在于: OO思想世界观的狭隘性进而造成的OO设计方法论的局限性.

首先我理解作者搬出了晦涩的哲学理论就是为了描述OO思想的狭隘性. 虽然我对哲学的理解仅仅是一点点皮毛, 但还是可以看出作者的用意. 作者认为OO的思想(是否基于任何哲学思想, 我不敢肯定)是以原子论和形而上学等原始哲学理论为理论基础, 对客观世界的一种抽象描述. 而这些理论基础早已经被证实是不完备的, 狭隘的. 因此OO的思想也是一种不完备的, 狭隘的世界观. 它对客观世界的描述是具有先天的缺陷的. 而作者认为正是这种缺陷造成了软件设计和开发的种种瓶颈, 到了该敲丧钟的时候了.

首先, 任何理论都不是, 也不可能是完善的, 哲学理论的不完备有其必然性. 至于对于他们不完备性的论证, 我还不具备这种功力. 我想说的是, 不完备的理论并不是错误的甚至荒谬的, 所以OO能够发展壮大到今天自有它的道理.

所谓编写软件, 无非就是根据特定的需求, 告诉计算机该干什么(也许有些狭隘). 而计算机能理解的语言(也许指令更合适)和人类使用的语言有着巨大的鸿沟, 人们不得不使用计算机能够理解的语言来”命令”计算机. 而人就不得不沿着计算机的思维模式(运行模式)去思考. 遗憾的是, 人类本身思维的广度, 深度和可记忆的信息量实在是有限, 以至于渐渐以人的思维能力无法能将一个复杂需求转化为计算机能理解的指令集合(可怜人只利用的大脑的3%以下), 于是人们不得不抽象这些指令, 使人的大脑能够应付不断复杂的需求, 由机器语言, 汇编语言到早期的高级语言一步步产生了. (题外话: 我始终认为, 如果人的大脑有足够的存储量, 足够的运算速度, 足够强的逻辑推理能力, 人们可以直接用机器语言来和计算机交流, 计算机的任务不过使固化人的思维过程以便重复使用而已.)

面向过程的语言, 我个人认为是对电脑的运行方式进行抽象的语言, 无论他抽象的程度有多高, 它依然是要求人们用电脑的思维方式来思考. 随着需求复杂度的不断提高和人脑的局限性(也许我们不应该开发更高级的语言, 转而开发人脑的利用率), 开发效率, 维护效率, 团队合作效率已经到了极限. 人们需要一种非计算机流程式的思考方式来开发软件, 于是人们找到了一种描述客观世界的方式来开发软件: OO. 所谓代码复用, 封装什么的都是表面现象, 我认为OO带来的最大好处是: 人们再一次能够以大脑有限的能力开发需求越发复杂的庞大软件. OO在人和计算机间提供了一个桥梁, 使人和计算机不再以计算机的方式沟通, 而是试图通过模拟一个客观世界的方式来沟通.

注意这里的客观世界是一个很哲学的概念, 这也是为什么作者的文章里要大篇幅介绍哲学的原因吧. 什么是客观世界, 客观和主观是对应的, 客观就是实在, 存在, 宇宙…… 但是人们描述的世界真的就是客观世界么? 客观世界是存在的, 在人类产生前存在, 在人类灭亡后也依然会存在. 人本身就是客观世界的一部分. 作为仅仅存在于客观世界时间轴上几乎一个点和空间轴上几乎一个点的人类, 如何能够准确的描述客观世界呢? 除非, 注意, 除非: 客观世界是在时间上和空间上存在着一定的规律性的, 而人类的存在或者可观察的范围跨越了这个时间和空间的周期并掌握了这个规律, 而这个规律是会一直延续下去或者被证明是按照一定规律变化, 而且人们又掌握了这个变化的规律, 变化规律会一直延续下去或者按照另一个规律变化, 而人们又掌握了这个规律……

可以看出, 人类想准确的描述出客观世界是徒劳的, 因为人类甚至不能严格的证明客观世界真的是具有规律性的!! “那我们还在干什么? 一头撞死算了!” 所幸的是, 人类还是可以发现并利用在我们能触及的时间和控件范围内, 具有重复性的规律(感觉好多了). 转了一圈回来, 我的意思使说, 人类试图描述客观世界, 仅仅是人们眼中的客观世界, 人类描述的方式, 也是人们自认为是可重复的规律. 客观世界依旧, 当人们试图描述它的时候, 它早已被人们的思维所局限了. 但是OO试图抛开人们认识客观世界的方式来模拟一个客观世界, 也就是作者认为它是以形而上学, 而非认识论的方式, 局限性就产生了.

OO的局限性, 作者已经提出了许多, 我也说说我的理解. 正如作者所说, “人是从事物的特征与属性归纳出它的“类型”,而不是相反。某种意义上说,“类型”是为了节省描述时间而产生的”. 也就是说, 类应该是依托于事物的特征和属性, 而不是决定他们. 而在OO的设计中, 我们定义了一个类A, 然后向其中添加属性和方法. 注意: 这时, 这些属性和方法仅仅属于这一个类A, 而这些属性, 方法的跨类型的特性就此消失了. 我们会说这个方法是这个A类型所具有的方法, 而不是说因为包含这个方法(同时含有其他方法和属性), 我们才称这个类型为A. 因为这样, OO系统中非继承树关系的类之间的共性被抹煞了, 或者说原本具有相同属性和方法的类型被OO里的类定义和继承关系给硬生生的切断了.

我可以举一个例子: 我们来定义一个类型, 叫”人”, 它有各种各样的属性方法. 稍微学过OO设计的都会设计一些父类, 子类等等的继承树. 这时, 我要求设计一个新类: 机器人!! 弟兄们怎么办? 继承么? Composite? 也许有人会说, 机器人根本就不是人, 和人一点关系都没有嘛! 真的么? 那为什么我们会叫它机器人呢? 不要解释说虽然它叫**人, 但它实际上不是人. 什么叫”实际上”? 前面说过, 客观世界的描述仅仅是我们眼里的客观世界而已, 任何在客观存在上的归类都是基于人类本身的思维而已. 所以既然称它为**人, 那它就是和人有联系的. 抹煞他们间的关系就是抹煞了人们认识世界的方式而维护形而上的所谓”本性”. 其实我们需要描述的是: 机器人具有某些人同时也具有的属性和方法而已. 这些属性和方法本身就是是跨类型的, 我们没有必要再重新定义他们!!! 或许我还需要面人, 泥人, 人造人, 赛亚人, 那美克星人……

这是一个人们认识客观世界的方法和OO模拟的客观世界的矛盾. 人类无法描绘脱离于人类认识的客观世界. OO的世界观产生了缺陷, 正是忽视了人的认识. 我不是在说”我思顾我在”, 我是说, 客观世界是存在的, 但是当我们试图描述它的时候, 它就只能存在于我们的认识中了. 我们什么也不用说, 它就是”存在”. 这也是什么佛曰不可说, 道可道非常道, 捻花微笑等等的来由吧.

虽然OO有这么多缺陷, 但是这足以敲响它的丧钟么? 这些缺陷这么致命么? 下面我说说我理解为什么要提出这些跨类型的属性方法. 这样做决不仅仅是为了代码共用, 就如我一开始说的, 人类大脑的能力是有限的, 只有不停的抽象, 再抽象, 更高效的抽象, 才能使人类以有限的思维能力创造出更加庞大复杂的系统. OO的抽象提高了人们思维的量级, 但是OO的局限, 又使得人类有限的思维打了折扣(看来归根到底还是人太笨), 从思维上突破OO的束缚, 作者的思想还是非常有意义的!!!不过从世界观的突破, 到建立起自己的方法论, 作者还有很长的路要走. 作者提出的新语言, 需要等作者描述完全再做评价, 只是这个DJ的名字让我有一点点失望(纯个人品味).

在我看来, POP的程序设计接近于计算机本身的的计算模式, OOP的出现期望程序设计基于客观世界构成模式, 而第一次看到AOP, 我觉得它会使程序设计更加接近于人脑的思维模式.作者的DJ也让我又同感. 它从更深层, 从设计的出发点就基于人类认识世界的方式, 而非如OO一样试图模拟出一个客观世界. 这无疑是一个进步, 成功与否需要时间来检验. 但从规律上讲(可触及的时间和控件范围内), 它会使人和计算机的竞争中增加一个利器. 当然, 无论怎样的设计, 最终还是要由计算机本身的计算模式来(CPU的指令, 寄存器/IO的读写等)完成实现. 直到有一天生物计算机的出现, 直到又一天我们都睡在Matrix的棺材里.
0 请登录后投票
   发表时间:2005-08-08  
一种新的语言(9)

http://spaces.msn.com/members/zbw25/Blog/cns!1pA6-3FOo9yNp_4lmEHxdDqA!371.entry
0 请登录后投票
   发表时间:2005-08-15  
DJ中的事件机制(重写)

http://spaces.msn.com/members/zbw25/Blog/cns!1pA6-3FOo9yNp_4lmEHxdDqA!378.entry
0 请登录后投票
   发表时间:2005-08-16  
新语言的威力(2)

DJ对于ajoo的CO的支持

http://spaces.msn.com/members/zbw25/Blog/cns!1pA6-3FOo9yNp_4lmEHxdDqA!383.entry
0 请登录后投票
   发表时间:2005-08-21  
DJ对于数据持久化的支持(1)

http://spaces.msn.com/members/zbw25/Blog/cns!1pA6-3FOo9yNp_4lmEHxdDqA!389.entry
0 请登录后投票
   发表时间:2005-08-25  
DJ对于数据持久化的支持(2)
http://spaces.msn.com/members/zbw25/Blog/cns!1pA6-3FOo9yNp_4lmEHxdDqA!393.entry

DJ对于数据持久化的支持(3)
http://spaces.msn.com/members/zbw25/Blog/cns!1pA6-3FOo9yNp_4lmEHxdDqA!402.entry
0 请登录后投票
   发表时间:2005-08-31  
想先问个问题,OO的特性有三个:封装,继承,多态

你的新语言或者说新思想在这个层次上有新东西吗?
0 请登录后投票
   发表时间:2005-08-31  
dzzhu 写道
想先问个问题,OO的特性有三个:封装,继承,多态

你的新语言或者说新思想在这个层次上有新东西吗?


拜托,我辛辛苦苦写了那么多,你先看看再来问如何?
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics