本篇是本人发在天涯IT视界的帖子,现摘录在此,以作备份。原文地址:http://www.tianya.cn/publicforum/Content/itinfo/1/64623.shtml。

面向上帝编程语言

作者:魏可 提交日期:2007-5-2 14:07:00

我们在使用面向对象(OO)的编程语言时,时常感到有些挚肘的地方,可又无法言表,这说明OO技术有不足,网上都有很多这方面的讨论。这里谨是个人粗浅的看法。(作者:魏可 :gaoxybb-wk@yahoo.com.cn)
  
  我和很多人的看法一样,认为软件表达了编程人对客观世界的认识,在软件中我们设计了或表达了现实世界中的对应物。那么就Java而言,她的万物之本Object如何与现实世界对应?
  
  可以想象,Object对应于物理学中的基本粒子,我们的万事万物皆来源于此。可是我们知道的基本粒子并不只有一种,什么质子、中子、介子等等。但是有些物理学家在冥冥之中笃信有一种最最基本的粒子,由它构造了我们的世界,因此前赴后继、越钻越深,据说现在已经穷追到了夸克、胶子,也许伟大的终极发现指日可待。那就假设Object对应这个最最最基本粒子吧。我们知道基本粒子都有一种能级跳跃的本事,如果我们万事万物都继承于它们的话,那你我显然也能这么干(不知一人得道鸡犬升天算不算?)。你有没有试过?所以,我们万事万物不是继承于基本粒子,而是由基本粒子所组成,组成后就发生了质变,不是原来的东东了。因此Object不能对应基本粒子。
  
  让我们来到精神世界,将Object对应于上帝。世界各国都有将灵性或物品当作神的化身的传说,而神显然又是上帝的化身。在中国有道生一、一生二、二生三、三生万物之说,道就是中国的上帝。而我们软件中的所有东东均来源于Object,显然Object可以对应于上帝。上帝的特点不仅大慈大悲,而且法力无边。可是我们的Object却相对弱智的多。在西方,有天赋人权之说。在中国,上天还赋予我们生存权、发展权,据说最近还多给了我们一种:和谐权。Object有此能耐么?Object仅有8种法力(方法),而且这8种法力还经常无用武之地。不仅如此,在我们的软件中,任何一个家伙,其法力都会大于他,至少也不亚于他。Object是我们软件中最笨拙、最愚蠢的家伙。如果将Object对应于上帝真是OO的本质的话,那这个愚笨的Object是否就是挚肘我们施展拳脚的根源?
  
  也许以上都不对,再换一种视角:Object只是我们对万事万物的一种最基本的抽象。这回总算说到点子上了。可是我们的世界总是先有万事万物,然后才能对其中的事物进行抽象。所谓:横看成岭侧成峰。总是先有山在那里,从一个角度去看,我们抽象出“岭”,从另一个角度去看,我们抽象出“峰”,最后我们又进行更高级的抽象:有岭有峰谓之“山”。在软件世界中,则恰恰相反,我们必须先有抽象,然后再有具体实现。我们先期已经构造了“岭”和“峰”,有一天忽然发现其实更应该构造的是“山”,你说这“山”是继承“岭”还是继承“峰”?于是前功尽废,重新来过。OO的死穴昭然若揭。
  
  困难压不倒英雄汉,死穴岂可点大师?大师谆谆教诲我们:要尽量针对接口编程,而非针对实现。也有称之为面向接口。接口这位类的表兄天生就是来化解死穴的。相对类而言,接口才是真正代表了抽象。你说“山”有岭之魂,那就实现一个“岭”的接口;你说“山”有峰之魄,那就再实现一个“峰”的接口。接口在OO家族中虽非直系宗亲,却是我最为敬仰的。看看接口在软件世界中所受到的顶礼膜拜,其程度远远甚于类。任意打开一个中间件的API说明,其中最为扎眼的就是接口。OMG的规范文本开口闭口皆为接口,类则黯然失色。作为类的最高领导,Object的地位显然受到严峻挑战。可他还坐在那至高无上的皇位之上。名不正言不顺啊,怎一个愁字了得。
  
  沉舟侧畔千帆过,死穴前头却萦愁。我能化解这千古愁吗?不才汗颜,我哪有这本事?除非我继承了基本粒子,来个能级跳跃。不过冥冥之中我可以有一个梦想,幻想在不久的将来,有一个小子,他实现了能级跳跃(没有继承基本粒子,大概接了口)。他创立了一种语言,不再面向对象,也不面向方面,而是面向上帝(饶恕我的不敬,阿门!)。所有的东东均为上帝的化身,所有的东东从它创立的那一刻起,便有了无限灵性的可能。我们在软件中编写的一切法术,均是属于上帝的,编得愈多,上帝的法力愈大。那位说了,这样的话,你的软件中就不需要其他东东了,所有事情均由上帝代劳可以了。此言差矣,让上帝一人干活,你怎能忍心?没有其他东东,岂不回到混沌世界?在那个世界,无须干任何活。为了抽象,为了表达现实世界的需要,我们和上帝都需要东东。上帝根据某个抽象概念,将必要的法力赋予他所看中的东东,这个东东于是就变成了那个概念所表达的东西了。一旦龙颜不悦,可以随时废了他的功力,他就又变成什么也不是的东东了。打一个现实一点的比方,有一部手机,仅能打电话和接电话。一日,上帝兴起,赋予了它拍照的法力,于是,它就变成了数码相机,同时也还是手机。还需要接口吗?问一问上帝,或查一查它的法力表,就知道它能代表什么概念了。
  
  以上胡言了。欢迎访问我的博客:http://blog.csdn.net/victor01/

作者:魏可 回复日期:2007-5-4 14:53:45 

    虽然幻想去面向上帝,但其实我还不敢,主要是担心功底不够,还有更主要的是囊中羞涩,呵呵。
  
  那我能面向神仙么?算了吧,上帝不好惹,神仙也不是省油的灯。那就再降一级,我把目光转向精灵。记得小朋友的美丽童话中,经常会出现什么精灵、仙子之类的,她们可爱又善良,尽管法术有限,但比起我们这些愚钝之人来说,可谓灵性多了。而且与她们打交道,并非我的创举,我们现在许多软件产品(比如Word)中都有一些精灵助手之类的东东。看来还是比较安全的。退一步讲,万一有什么闪失,那罪名也不是我一个人担着。主意已定,动将起来。
  
  精灵,Fairy。
  public interface Fairy…{
   public String getId();
   public String getType();
   public Fairy find (String fid);
   public Object showPower(String asking, Environment envi);
   public void addPower(String asking, Class cls, String method);
  }
  
  仙人必有名号。没有名号,不要说系统处理不了,而且也不符合常理,getId就是向仙人讨教名号。说明:尽管精灵不及神仙,但为了尊重起见,我应该往大一辈称呼,以便讨得喜欢,所以很多情况下称其为神仙、仙人。
  
  你我凡夫俗子,生于天地之间,全赖神灵护佑,难免诚惶诚恐。于是乎见庙就进香,遇佛就磕头,然而常常事与愿违。为什么?拜错神了。欲知你要拜的是哪一路的神仙,getType帮你忙。这一点要尤为小心,否则仙人怪罪下来,那可担待不起。
  
  前面说道,精灵非神仙,更非上帝,神仙尚有力所不逮,何况精灵乎?加上经常搞不清路数,岂不是愁煞小民了?《西游记》开篇第一回,美猴王就遇此困惑,欲求长生不老,访佛仙神圣,却不知何往。这时,忽跳出一个通背猿猴,道:“他只在阎浮世界之中,古洞仙山之内。” 猴王闻之,满心欢喜。可见,精灵虽有所不能,但却可能引你到仙人之处。这里的find就期冀达此功效。参数fid一般是指仙人的名号,但你也可设计成允许用路数等问题来求问仙人,全望所求精灵的灵巧程度而已。当然,这也不是万能的,如果还不行,那你只好另求高明了。
  
  接下来就要谈精灵的主要工作:显灵,或显圣:showPower。求仙拜佛,必是有所求才是,所以要给一个参数asking,告诉仙人你求什么。比如,你跪在佛像前,捣头如鸡拾米状,口中念念有词:“菩萨菩萨,发发慈悲,帮我把埋在墙角的三百两银子找回来吧。”这里,你的所求是:找回银子。但仅此不够,你还向菩萨提供的环境参数(envi)中加了两个说明:1、在墙角,2、三百两。为了便于菩萨的工作,你还可以在环境参数中多增加一些情况说明,比如,3、昨天晚上,你还在那里立了一块牌子,上书:此地无银。4、而今天早上,你发现牌子的背面多了四个字:王二没偷。按理,真正的仙人本不需要你提供什么环境参数,你只要诚心祷告即可,神仙自然洞察一切。但我的精灵实在道行太浅,你必须将必要的资料提供给她。何也?因为我用的是Java,其Object太笨,搞得精灵也没辙。将来真要出了面向上帝的语言,想来这些就会不在话下。上帝保佑,等着吧。
  
  如果一切顺利,你也没拜错神,神的法力也足够,showPower自然会达成你的愿望。那么,法力何来?法力是由外界赋予的:addPower。也就是说,就纯粹的精灵而言,她本身是没有任何法力的,但她具有接受任何赋予的法力的能力。什么叫法力无边,我看这就叫法力无边。所谓受人以鱼,莫如授人以渔。又所谓无为而无所不为。当你觉得一个实例化的Fairy法力不够时,你无需改动Fairy本身的任何代码,就可以任意增加她的法力。按理,法力本应是上帝赋予的,但我这不是面向上帝的语言,所以你必须指明是谁赋予的:cls,法力的名字叫什么:method。这样,当精灵要行使其法力时,就会找到cls,从那里获得method。同时,在赋予法力的时候,要告诉精灵,何种所求(asking)才用此法力。这样,asking、cls、method就构成了这个精灵的法力表。你只要不限制法力表的容量,那就成就了法力无边的可能。而且法力表是动态的,随需而动啊。
  
  最后,我这里略去了,还可以允许动态删除法力。
  
  当然,在实际解决时,还有一些技巧可用,比如智能筛选、冲突处理等等不题。
  
  在这样的系统中,将是形形色色、各式各样的精灵,像天使一般,自由翱翔、施法斗强的缤纷天地。希望她们带着我们进入那梦寐以求的理想王国。
  

  作者:魏可 回复日期:2007-5-6 11:30:44   

没人顶,自己顶。

作者:闲时读书品茶 回复日期:2007-5-7 21:12:15   

如果一切顺利,你也没拜错神,神的法力也足够,showPower自然会达成你的愿望。那么,法力何来?法力是由外界赋予的:addPower。也就是说,就纯粹的精灵而言,她本身是没有任何法力的,但她具有接受任何赋予的法力的能力。什么叫法力无边,我看这就叫法力无边。所谓受人以鱼,莫如授人以渔。又所谓无为而无所不为。当你觉得一个实例化的Fairy法力不够时,你无需改动Fairy本身的任何代码,就可以任意增加她的法力。按理,法力本应是上帝赋予的,但我这不是面向上帝的语言,所以你必须指明是谁赋予的:cls,法力的名字叫什么:method。这样,当精灵要行使其法力时,就会找到cls,从那里获得method。同时,在赋予法力的时候,要告诉精灵,何种所求(asking)才用此法力。这样,asking、cls、method就构成了这个精灵的法力表。你只要不限制法力表的容量,那就成就了法力无边的可能。而且法力表是动态的,随需而动啊。
  ===============================================
   这段读不懂啊,cls、method由谁来实现和维护?实现精灵的程序员实现的话,那和面向对象中设计模式的Decorator模式有什么本质的区别?由系统来实现的话,这样一个包罗万象的底层系统只怕只有上帝才搞得定吧?
  
   另外面向对象相对于早期的分析、设计而言更接近常人的思维方式,因而获得了很大的成功,从来也没想过以最合理的方式描述整个世界,将它提升到形而上学的高度来批判是否不厚道?另外那个“公用代码+扩展代码”理解为“公用接口+扩展代码”是否更好?面向对象分析中抽象发现的主要是行为上的一致,“公用代码”的意义在于便于维护、扩展,最初的分析阶段似乎还无需太留意这些。
  

  作者:mingfei200169 回复日期:2007-5-7 21:58:13  

都是程序员,顶

  作者:魏可 回复日期:2007-5-8 0:00:20   

果然有高人赐教,幸会幸会。
  
  相对于addPower来说,Decorator模式确实也能动态添加法力。
  
  先看一下Decorator模式。为了便于对编程不熟的网友看热闹,我还是用比较通俗的比喻。
  
  Decorator模式俗称装饰模式。打个比方,我们有一个孙猴子,他只有72般功法,现在要用Decorator模式给他增加一个功法,就这样:
  
  你首先构造另一个孙猴子,他看起来就是一个孙猴子,但他其实只是一个孙猴子的壳,我们暂且称其为“装饰猴”。装饰猴要想有作用,必须把真的孙猴子装入其壳内才行。装饰猴中含有一个孙猴子所不具备的法力,就是要给孙猴子增加的法力。当真的猴子装入装饰猴的壳内后,装饰猴的表现就跟真猴子一样灵光,并且在施法的时候,这个新增加的法力会一并施展出来。这就带来一个问题:孙猴子入壳后,不管需不需要,新增加的法力都会一并施展。当然,你也可以在设计装饰猴时指明,在什么情况下施展新法,并且你如果是用一种统一的方式来筛选法力,那在增加法力的意味上就和我的精灵接近了。但当这个装饰猴走到其他地方时,其他人仅仅是把他当作一个原始猴,无法知道他已经有了新魔法,不像我的精灵有法力表可查。另外,每到一个地方,要给他加一个新法力时,就需要将他装入一个套子,套子套套子,10个法力套10层套子。(也不知孙猴子在里面热不热?爽不爽?呵呵,开玩笑),如果你要把第五个法力撤销而其他保留,必须先脱掉5个,再穿上4个。
  
  
  在我的精灵结构中,与此略显不同。比如铁扇公主愿意给孙猴子一个过火焰山的本领,她仅仅是告诉猴子:需要时到我这借芭蕉扇。所谓addPower仅仅是孙猴子将此信息记下而已。而且孙猴子还可以将此信息告诉别人,大家信息共享啊,呵呵!
  
  不知以上理解对不对?

  作者:魏可 回复日期:2007-5-8 1:17:56   

作者:冰点零下90 回复日期:2007-5-8 0:43:29 
     认真看了,抱歉看不懂。对不住楼主了。
  
  ===============================
  
  其实软件从其基本道理上,并非高深莫测。
  
  我们编写软件,就是为了解决现实中的问题,或解决人思想中的问题。因此,在软件中,就要设计现实世界中的对应物,或人的思想中的对应物,然后按照这些对应物在现实或思想中的行事规律和方式,来模拟动作。以达到电脑模拟人脑或现实世界的目的。
  
  那么,现在最流行的编写软件的方法,就是面向对象的编程方法。而面向对象的编程方法,最典型的就是Java语言。(本人也是Java爱好者)
  
  在Java语言中,一个基本的思想就是,万事万物均来源于一个最基本的东西,名叫:Object,也就是对象(注意,此对象不同于我们找女朋友的对象哦。)。
  
  面向对象的方法还有一个基本概念,就是“继承”,即认为万事万物均继承Object,也就是万事万物只是Object的变种,其本质还是Object。
  
  本帖子就是冲以上观点而来。
  
  欢迎赐教,欢迎凑热闹。

作者:舞泠风 回复日期:2007-5-8 8:54:14   

精灵,Fairy。
    public interface Fairy…{
     public String getId();
     public String getType();
     public Fairy find (String fid);
     public Object showPower(String asking, Environment envi);
     public void addPower(String asking, Class cls, String method);
    }
  ====================================================================================
  寒。。。你忘了最后大括号后面的那个分号。。。。。。

  作者:魏可 回复日期:2007-5-8 9:15:33   

作者:shfaye 回复日期:2007-5-8 04:36:06 
    有意思。不过对于普通人来说。能够实现,够用就好。oo给程序员一片广阔的视野。把世界观带入了程序。
  ==============================================
  
  面向对象的方法早已就显出不够用、不好用的一面了,要不怎会出现那么多的设计模式。而且就设计模式而言,现在看来还不近人意,于是就有各种框架等理论和实践来弥补。
  
  
  本来科学不能解释的东西,只有用宗教了。可惜,现实中至少我没遇到过神,所以 go只能在天堂才有。^_^
  ==========================================
  可是,你心中有佛。 心中有佛,你就是佛。怎能没见过呢?

  作者:魏可 回复日期:2007-5-8 09:22:08   

作者:舞泠风 回复日期:2007-5-8 8:54:14 
  寒。。。你忘了最后大括号后面的那个分号。。。。。。
  ===============================================
  
  心中有佛,佛自然就在。那个分号也是佛呀。^_^

作者:魏可 回复日期:2007-5-8 10:03:43   

再续一下过火焰山的故事:
  
  比如铁扇公主愿意给孙猴子一个过火焰山的本领,她仅仅是告诉猴子:需要时到我这借芭蕉扇。所谓addPower仅仅是孙猴子将此信息记下而已。而且孙猴子还可以将此信息告诉别人,大家信息共享啊,呵呵!
  =====================================
  如果孙猴子够狠的话,他还可以跑到天涯上发一个帖子,告诉所有的人:铁扇公主那儿有芭蕉扇,如果想过火焰山,就去借。这就是将铁扇公主的那点家当昭示于众了。也不知铁扇公主是高兴,还是恼火?^_^

作者:好色苯小孩 回复日期:2007-5-8 10:47:09   

数学的基础也不稳固,上帝都有缺陷,人类构造的理论怎能完美。
  不管黑猫白猫,抓得到老鼠的就是好猫。
  没有一种编程方法能够解决所有问题,OO并非万能钥匙,搂主太过执着了。
  

  作者:猛回头 回复日期:2007-5-8 10:52:55   

简单问题复杂化

  作者:冰封红杏 回复日期:2007-5-8 11:12:57   

每一个对象都是空的,它什么也没有,它只是一个架子。我们要做的仅仅是把这些对象的架子填满或者抛弃。于是这些空对象就成了一个实例不妨把这些实例看成现实世界中的实体。我们再把这些实体相互联结起来就形成了一个小宇宙。这大概就是面向对象的程序设计的思路。如果我们能够创造一个上帝的实例(在程序中实现一个上帝)然后再让上帝实现程序的功能,那就是在我们的编程语言中要存在无数个上帝了。上帝失去了唯一性还是上帝吗?其实最好的编程语言是汇编语言是机器源代码。其他的高级语言仅仅是为了方便和代码管理而设的。

作者:hhoking 回复日期:2007-5-8 11:34:48   

  基本粒子组合发生质变就说明面向对象理论的缺陷了,
  现在都提倡要聚合,不要继承吧,呵呵。

  作者:s5k 回复日期:2007-5-8 11:48:40   

  Object, 本意应该为物,也就是“存在”的物,既包括实物,也包括虚物。中国计算机届将其翻译成“对象”,实在是一大不敬。
  至于楼主说的“山”这个物,你看是岭我看是峰,这里强调的是“你”“我”所看到的“山”的表象、属性,而表象的交界,就是interface。至于“接口”这种翻译,也是一大不敬。
  Interface是对Object这种相对的“静”物的描述,包括行为,表象等等代表“动”的变化的方面,两者动静结合,相辅相成,何来死穴瞎愁之说。
  OO是一种方法论,是对编程“思维”的一种总结,因此,它也是“动”态的,发展变化的。
  这种发展变化的产物AOP,才是一种面向上帝的编程,因为AOP方法中存在太多“先验”的规则,是相对于OO的一种反动。
  

作者:魏可 回复日期:2007-5-8 12:14:40   

  作者:s5k 回复日期:2007-5-8 11:48:40 
  
  这种发展变化的产物AOP,才是一种面向上帝的编程,因为AOP方法中存在太多“先验”的规则,是相对于OO的一种反动。
  ==================================================
  高人,看来你要点我的死穴。
  
  在下对AOP道行不深,麻烦你用通俗的语言解释一下给各位看官瞧瞧。
  
  如果AOP真和我的主帖相近,那我们就给它改个名字吧,不叫“面向方面”(老外的叫法),而叫“面向上帝”(俺们中国人的叫法)吧。这多爽,多容易理解!这也算是你我对软件知识普及的一种科普贡献吧。^_^

作者:魏可 回复日期:2007-5-8 13:39:43   

  作者:冰封红杏 回复日期:2007-5-8 11:12:57 
  上帝失去了唯一性还是上帝吗?
  ======================================
  你说的那是老外的观点。在俺们中国银看来:心中有佛,人人皆佛,世界原本就是这样。

作者:claudchen 回复日期:2007-5-8 14:07:09   

  这个问题东西方都早有答案
  1 西方回答这个问题最早的是康德,那最著名的论断是“哥白尼式的革命”。
  康德所谓的“革命”是教人们反转观念,象哥白尼一样,告诉人们不是太阳绕者地球转而是地球绕着太阳转,反转之后的观念才是真理。那之前人们普遍认为的错误观念就体现在对“知识”的理解上。对“知识”的定义可追溯到亚里士多德,他认为“知识”是指观念向对象符合。之后的哲学家的思想大多都建立在这种定义的基础上。然而,这种定义受到休谟致命的打击,他指出“观念向对象符合”不能被假设,被默许,它是值得怀疑的。他提出我们所有的思维都逃不出我们内在的观念,根本不关对象的事,哪怕是我们认为的对象也是我们的“自以为”,他还是观念,所以,我们怎么能确定观念向对象符合了,就连对象本身存不存在我们都不能去确定的。对于休谟的无懈可击的观点,康德很认同,但他却指出,谁说知识是观念向对象符合,应该是对象向观念符合。这就是反转观念,对“知识”进行“哥白尼式的革命”。
  2 东方回答这个问题最早的是释迦牟尼,相关的论断是“空性”。“空性”是说事物并不是依照你所标示的样子存在。佛法告诉我们:凡夫所见的一切,都是透过情绪、习性和二元对立等自我的滤光镜,就像带着琥珀色太阳眼镜看雪山一样,我们看不清楚事物完整的显现,也看不清楚事物真实的本性。首先,你看不见事物的真实本性;接着,虽然你看到了显现,却不明白这种显现可能只对你而言是这样,并不通用于其他众生。
  接口也好,object也好,都是对我们对我们感知到现实的模拟,就是康德所谓的“对象观念”,它不可能也没必要唯一。

作者:邤羽 回复日期:2007-5-8 14:34:57   

  难道这就是传说中的边缘科学~?

作者:魏可 回复日期:2007-5-8 19:51:37   

  作者:util 回复日期:2007-5-8 17:28:00 
  事实上这样万能的神仙在佛教里面是不存在的,佛主也不是万能的。
  =============================================
  这话你都敢讲?嘘…..,小点声。
  
  
  所有的经书,高僧的讲法只是为你指出方向,授你以方法,能使你达到彼岸的是你的双脚。
  ===================
  咱哥儿俩终于想到一块儿去了。你受佛的指引,达到那美好的彼岸。你就是精灵啊。也是佛。

作者:badcat92 回复日期:2007-5-9 09:12:48   

  有一个基本概念,就是“继承”,即认为万事万物均继承Object,也就是万事万物只是Object的变种,其本质还是Object。
  ———————————————————
  楼主开篇先谈到了基本粒子,不知楼主对物理学是否有兴趣.现代物理告诉我们,宇宙的图象是几何的,而非物理的.我们的世界除了空间以外什么都没有,那些个粒子不过是微观尺度上弯曲的空间.我不知道用空间来理解Object是否合理,但是这种空间是我们能用语言来描述完整的吗?如果是,那我们就可以编排这个世界(像matrix?),来扮演上帝的角色.
  呵呵,楼主创造的精灵Fairy首先让我想到圣经中人类建造Babel塔,我们在施工前是否应该先问一下上帝能否允许我们建塔?…越来越唯心了:)楼主的困惑我认为不是语言本身所能够解决的(自己解决自己?),所以需要外力.这种外力是什么?数学.无奈数学没有软件一样的发展速度,我们逐渐的掉进了自己的挖的坑.
  

作者:魏可 回复日期:2007-5-9 10:08:16   

  作者:老实点小样 回复日期:2007-5-8 23:42:32 
    天啊,这样的文章上天涯头版,要CSDN来,根本一刷而过
  =======================================================
  一看你就是高人,这篇帖子确实在CSDN上发过,真的是一刷而过。
  
  其实在这里发时,也是一刷而过的。不大工夫,就被刷得没影子了,后来没办法,我自己顶,顶着顶着,不知怎么就头版了。看来还是应验那句话:心中要有佛。
  
  但在CSDN上不同,那里像您这样的高人太多,我不敢自己顶。

作者:魏可 回复日期:2007-5-9 11:39:05   

  前面说过,面向上帝,只是鄙人的幻想而已。如果真想那么干,非等闲之辈而能为之。但有一点可以肯定,绝不能完全套用现有的面向对象的思路进行思考。如果那样,你也顶多搞出一个我前面提到的精灵之类。
  
  通过我前面的描述,明眼人可以看出,精灵是完全可以实现的。而事实上,我的精灵已经在鄙人的系统中运行一年有余。尽管显得粗鄙,但思路完全一样。当然,有些同行可能不以为然,认为你的那点功能,用其他方法一样实现,比如:套子套套子。但毕竟是不同的思路。如果你愿意将它拔高一点,也可以认为这是另一种设计模式。
  
  怎么认为都可以,那是你的事。还是那句话:佛在你心中。

 
作者:winefox 回复日期:2007-5-9 12:06:28
 
 

  呵呵,
  一家之言,有点意思

  作者:橙子青 回复日期:2007-5-9 12:27:36   

  为什么是上帝,不是菩萨,不是女娲,不是盘古.是不是上帝创造了万物把开天P地造人的事全干了.所以我们在形容全能的神明时就只用上帝,而不是盘古+女娲.这一就从侧面证明了人类的懒惰,为了方便可以舍弃前人的东西接受外来事物.

  作者:云中笙 回复日期:2007-5-9 12:39:26   

  需要说的那么复杂吗?代码也是人写的,程序所表现的不过是程序员思维的延伸,并由人的思维来解读。如果世界由上帝定义,那么人的思维是否也是上帝思维的延伸呢?很明显,不是.人就是人,与其用上帝的代码来定义人,不如用人的代码来定义上帝更为正确.人的智慧出现之前,哪里来的上帝?所以无论是人的代码,还是上帝的代码,都没有智慧。有智慧的只是解读了代码的人。

  作者:旧鞋子 回复日期:2007-5-9 12:43:18   

  这样的帖子就不要上热点了吧

作者:电脑美女 回复日期:2007-5-9 13:26:22   

  技术热点 值得关注 楼主加油!顶!!
  

  作者:pawl 回复日期:2007-5-9 14:18:27   

  天涯混不出程序员
  不是那块土,开不出那花

作者:daemonxu 回复日期:2007-5-9 15:18:14   

  怎么看怎么觉得是个逻辑陷阱
  人类永远不能理解比自己大脑更复杂的东西
  就现阶段而言,人类所能理解的复杂度跟人类大脑的复杂度相比较起来还差很多数量级
  就和计算机本身无法理解自己一样
  
  我们生存的世界拥有我们世界的规则
  软件的世界有软件世界的规则
  
  我并不反对楼主采用现实世界中的概念去辅助理解计算机世界的概念
  但本质上,计算机的理论基础是图灵机模型
  如果楼主在这个貌似哲学问题的问题上还要继续思考下去的话
  请先把自己设想成为一台图灵机
  不妨把人类世界设想成为图灵世界所不能理解的神的世界
  那么在图灵世界里最基本的粒子是什么呢?
  …
  然后,图铃世界的神仙们喜欢使用图铃世界的某种组合来映射他们的世界的某种物体
  称他们为对象
  那么两个世界在映射过程中的基点又应该怎样来设置呢?
  …
  如果,图灵世界和现实世界有同样的规则
  计算机就可以和我们一起思考
  我们从哪里来
  我们要到哪里去
  我们生存的意义是什么了
  ….

作者:魏可 回复日期:2007-5-9 23:12:12   

  作者:doujp 回复日期:2007-5-9 22:09:25 
    人类一思考,上帝就发笑!!!!!!
  =================================================
  我从一开始就想着如何讨上帝欢心,照您这意思,上帝比老婆好糊弄多了?

作者:spke100 回复日期:2007-5-9 23:40:18   

  竟然上了推荐,其实这想法我去年已想过,用另一个ID发过类似的,
  打算用java语言实现人工智能,看来搞计算机的,只要学到一定程度,想法都是差不多的。

  作者:spke100 回复日期:2007-5-9 23:44:39   

  支持LZ的帖子,学计算机的,有想法就应该多交流

  作者:厦门狼族 回复日期:2007-5-10 00:44:48   

  学问的魅力是使人更加头晕!

  作者:蹲在厕所数蛆 回复日期:2007-5-10 1:04:14  

  面向上上帝

  作者:上帝佑我女王 回复日期:2007-5-10 1:18:09  

  正在研究设计模式,mark一下。
  现在的IT视界需要这样的帖子来拯救啊!

  作者:草拟大业 回复日期:2007-5-10 03:07:58   

  外国哲学家创造机器语言,中国钳工想做哲学家。

  作者:砖王之王2007 回复日期:2007-5-10 3:39:1  

  计算机不可能有万能的语言,就像不存在永动机一样.楼主讲的太抽象,不切实际.就算是上帝,也决不止一个,西方有上帝,印度有佛.与其整天幻想见到上帝,不如平时多做点善事,也许你就是别人心中的上帝了.多想想怎样解决实际问题,比幻想来的更实在.
   这样的帖上头版,让人进来一看感觉被欺骗了.天涯在其他方面还可以,为什么在IT方面却没落到这个地步了.

  作者:迅速发帖器 回复日期:2007-5-10 6:46:25   

  鼓励一写,帖子非常好

作者:好色苯小孩 回复日期:2007-5-10 08:51:35   

  面向上帝的语言,估计也就上帝才能使用,上帝根本不需要计算机,发明出来有个屁用。
  

  作者:stupitguy 回复日期:2007-5-10 09:02:37   

  面向对象的思想是用来解决问题的,而面向对象的确有很多不能与现实事物对应的地方,但用它来解决问题确实很方便,楼主未免转了太多牛角尖吧,对于应用系统来说,面向对象用得很方便,这个是无可厚非的……

  作者:致命摇篮 回复日期:2007-5-10 09:03:46   

  上帝应该不会编程吧,我们比他还厉害,要是上帝学编程,估计也会晕晕的~

作者:魏可 回复日期:2007-5-10 10:08:57   

  作者:草拟大业 回复日期:2007-5-10 03:07:58 
    外国哲学家创造机器语言,中国钳工想做哲学家。
  ===================================================
  外国哲学家肯定搞不出面向上帝的语言,因为他们相信上帝只有一个,大家只有赎罪的份儿。而中国钳工认为:心中有佛,人人皆佛。也就是人人都是上帝的化身。因此中国钳工用钳子拧出来的机器是可以与老外有所不同的。

作者:风尘剑 回复日期:2007-5-10 12:33:12   

  我也来支持一下.我最近想写IT里的哲学,里面就打算谈面向对象的哲学解释.有兴趣请见我的博客:
  wiltonjones.spaces.live.com

作者:魏可 回复日期:2007-5-12 16:09:52   

  这篇帖子在天涯挂了近十天,有赞有弹,主要还是观者众,但提出讨论者较寡。
  近日闲来无事,继续八一八这个话题,如果运气好,就当给你一个精神佐餐吧。也欢迎有好事者一起来讨论。
  
  面向上帝的编程的原则
   作者:魏可(gaoxybb-wk@yahoo.com.cn)
  
  1、理解上帝。
  上帝是什么?不能把上帝理解为一个Object,这还是面向对象的思路,行不通。可以尝试用中国的“道”来理解。所谓道生一、一生二、二生三、三生万物。也就是万事万物以及我们精神世界的基本原则和规律。
  其实,我们的任何一门语言,都构造了一个事务运行的环境,都有一个或大或小的宇宙,其中所富含的原则或规则,即为道。之所以不理想,乃是因为此道与彼道不同,与我们的现实理想有差距。我们应该构造一个能够与现实世界相接近的道。当然,我们并没有穷尽现实世界的所有基本规律,或许我们根本无法穷尽这些基本规律。那就构造一个与我们精神世界相接近的道吧。因为计算机本来就是辅助人脑的。那位说了:我们的精神世界?更加玄乎其玄了。那就构造一个与我们的精神理想相接近的道吧。这就是我们心中的道,心中的上帝,心中的佛。(不要拍我,就当我是多神论者。)
  以下,就把我们精神世界里的所有东东称为精灵,来看看这个心中之道应该是什么样的吧?
  
  

  作者:凡狗 回复日期:2007-5-12 21:44:30   

  太高深了,快成仙了

  作者:魏可 回复日期:2007-5-13 02:38:28   

  作者:凡狗 回复日期:2007-5-12 21:44:30 
    太高深了,快成仙了
  =====================================================
  要说玄,你这话比我玄。并没有人说,这样的一种语言是存在的,也没有人说,这样的一种语言是一定可以实现的。但是,我们的思想可以是自由的。所谓:我思故我在。

  作者:魏可 回复日期:2007-5-13 02:40:03   

  前面谈到,任何一门语言都是构建了一种宇宙规则。其实不仅语言,我们现在流行所谓的框架理论,其实也是在语言的宇宙规则中,去构建另一种更为精致的宇宙规则。这也恰恰是对其原有宇宙规则的一种不满的表现。
  
  争论来了,既然所有语言甚至框架之中,都有一种道,那也都有上帝,那么,所有的语言也就都是面向上帝的语言。很好,可以如此认为。我们的文章就此罢了,前面所说全都作废。
  
  但,既然开了这个头,不妨硬着头皮继续下去。细心的读者可以发现,我们这里有一个基本原则,就是,软件中所有的东东均为上帝的化身,均具有无限灵性的可能,就是精灵。这是我们这个面向上帝的语言的约束条件。
  
  就让我们看看如何化身,如何灵性的吧。
  
  2、海纳百川、有容乃大。既然精灵为上帝的化身,那它也就是一个小宇宙,它就应该有可能去包容万物。佛曰:“一粒沙中,大千世界”。用软件行业的术语,精灵应该是一个容器(Container),而且是一个可容万物的容器。这里,所谓的万物,也就是形形色色的精灵。在这个小宇宙中,包含了对大宇宙的行为规则的过滤,也就是小宇宙中的规律原则是大宇宙中的子集。因此小宇宙就带有了明显的行为特征。
  其实,在现有的软件实践中,之所以容器盛行(如J2EE中),恰恰正是对原本理论的一种修正,以便更好地去模拟世界。可惜这种修正无法彻底,因为容器在本质上仍是Object这个弱智的上帝。
  但是,尽管我们这里的精灵可以去包含万物,在实际中却不可能真的让每个精灵都去包含无穷多的万物,除非你想你的机器崩溃。我们仅仅来谈一种包含的可能,也即是在原则上,是一种不限制。对于某一特定的精灵而言,它可以利用其自身的规则专门加以限制,这是其特性决定的。另请注意,这种特性,乃上帝赋予,正如我们所谓的天赋人权一样。或者说,一个精灵究竟能包容多少其他精灵,上帝说了算。或者也可能是:只要上帝不反对,你就尽情去包含吧。
  

  作者:魏可 回复日期:2007-5-13 17:06:23   

  3、法力无边的可能。这一点前文已经说了很多,其中最主要是具有接受法力赋予的机制。那么这种机制大概应该是怎样?与生俱来的是上帝赋予。行走世界后,法力来源有两个,其一,自己学来,其二,别人所赐。不管是与生俱来,还是自学成才,抑或是接受赠予,一个基本点是,所有法力均为上帝所有。也就是说,在我们刚开始编写一个软件项目时,这个宇宙空间是太虚的,亦可以说上帝是无能的,或者说是无需任何能力的,此时无能胜有能啊!呵呵。
  
  随着你构造第一个精灵,第一个法力,上帝的法力与此俱进。精灵愈多,法力愈多,上帝则愈能。最关键的是,上帝是具有调配和重组法力的机制。
  
  4、洞悉环境的能力。上文书说到,精灵本身就是一个容器,包容了其他精灵。可以想见,绝大多数精灵都将处于其他精灵的容器之中。她应该具有洞悉自己所处环境的能力。并根据环境情况来决定自己的行为。最早还提过:“你只要诚心祷告,仙人自然洞察一切。”就是这种能力。当然,究竟是否洞察一切,还要看仙人自己的修炼情况。
  

  作者:云中笙 回复日期:2007-5-13 17:29:02   

  楼主究竟是寻找上帝,还是想创造上帝?通过思维寻找上帝,估计不大可能。物质世界存在的充分条件之一,就是偶然。如果是创造上帝,那么楼主不是第一人了。不过精神创造的上帝不是万能的,这个上帝只是你精神层面的主宰。既然是你的上帝,与编程扯到一起也不足为怪了。楼主说什么就是什么吧。。。

  作者:魏可 回复日期:2007-5-13 23:01:19   

  作者:云中笙 回复日期:2007-5-13 17:29:02 
  既然是你的上帝,与编程扯到一起也不足为怪了。楼主说什么就是什么吧。。。
  ========================================================
  软件本来就是人试图将自己的思想或思路复制到电脑里,并试图让机器在一定程度上代替人的思维。所以,究竟应该在软件中建立何种思维机制,应该成为编程人所关心的话题。
  但是,如果本帖只是我个人打算如何编程,并且还是我想怎样就怎样,那确实有点令人悲哀。

  作者:s5k 回复日期:2007-5-14 9:51:12   

  咳咳,楼主,
  建议您学点人工智能,最好能研究下人工记忆,
  然后呢,您就不会不顾上帝的面子来天涯这里传道了。
  阿闷。
  

  作者:魏可 回复日期:2007-5-14 12:03:38   

  楼上又出难题了。人工智能非在下所长,仅略知皮毛而已。什么模式识别啦、模糊控制啦、决策支持啦、LISP啦、Prolog啦、自动推理啦、知识处理啦、专家系统啦、自然语言理解啦、机器视觉啦、神经网络啦等等等等…….。在下也曾研究过一个称为OPS83的语言(古老且非著名的人工智能语言)。
  据在下所知:人工智能领域内短期的最高理想乃第五代计算机。不过也有近30年的历史了。尚未见所谓的理论突破。
  还是那句话:怎一个愁字了得。

  作者:lisong406 回复日期:2007-5-14 17:30:57   

  我觉得魏可的观点不错,就是很难实现,因为传统的计算机模型不支持~~~~我也是程序员和java爱好者,对与楼主的想法,我也曾经设想过。楼主不妨再去深入学习下java.

  作者:bqrvfhp 回复日期:2007-5-14 23:12:23   

  写得不错

作者:魏可 回复日期:2007-5-15 20:38:08   

谢谢上面二位的鼓励,最后再来两点所能想到的。
  
  5、无尽类别。“分类”是人们思考问题的一种基本方式。现实世界中的事物本无所谓类别之分,但人们为了思考的有效性,通过归纳、总结的方法,对事物进行了归类。所谓:方以类聚,物以群分,吉凶生矣。
  “分类”也是人们从不同角度去看待事物的结果,所谓:“横看成岭侧成峰,远近高低各不同”。人们看待事物的角度不同,对事物的分类方式就会不同。
  因此,应该允许对精灵进行无限角度、无限侧面的分类,并且,这些类别是可以同时存在的。
  
  6、无限关联。大千世界中,事物之间无不相互联系。佛说:缘起性空。道曰:天人合一。物理学家霍金指出:空间与时间,以及存在其中的事物总是在相互影响着。可见,现实系统中事物的联系是无限的,因此在我们构造的宇宙中,精灵之间的关联也应该是无限的。也就是要存在一种机制,允许任意两个精灵,可以在任意概念上发生联系。
  

================================================

(转载请注明出处。谢谢!) <script language="javascript" type="text/javascript"> </script>