精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>C/C++>>C、C++语言基础>>关于GP,OO的一场私底下的讨论>>关于GP,OO的一场私底下的讨论1

主题:关于GP,OO的一场私底下的讨论1
发信人: wintereagle()
整理人: wenbobo(2002-11-26 13:58:48), 站内信件
关于GP,OO的一场私底下的讨论1
这是我和csdn上的c++高手myan私底下对gp,oo的一段讨论,其中还涉及到了
java com .net等问题。可能比较乱请大家原谅。


HI myman:
  很高兴能够和你交流。看来你对c++是很有研究的。对于我的代码你的
半懂是怎么样得,还有什么疑问我可以负责回答。我要多罗嗦一句tangtao
说python的我用了类似的foxpro宏替换得动态语义来实现一部分功能。其实
我今天翻了翻python得document发现python中得function也是对象也就是说
他可以和c/c++得指针一般作为参数传入别得函数例如可以用sort(list,mycmp)代替sort(list,"mycmp")只是因为reflect(反射)用的比较
灵活我才用这个方法。
  python的gp和stl的gp得实现思想不同,这个我同意。但是我不知道
为什么c++仍然是gp得主战场(当然我们排除c/c++比python得影响要广泛的多这个因素)。
  在我的理解中template和gp作为一种编程的思想和方法其实是c++多继承的一个补救措施.Gp
的出现使得oo能够更加清晰简单正确的刻画世界
因为在真实世界中得事物描述可以用这样一种比方来解释一辆汽车轮子有轮子自己的运动的方式和功能,
发动机有发动机自己的的运动方式和功能,控制系统有控制系统的自己的方式和功能
车子的骨架有自己的方式和功能他们互不隶属.
当我们组装一个车子的时候我们是把车子用多继承的方式去把这些不同功能的部件来组合起来。
oo作为程序设计思想本来也应该这样来做,
但是c++由于多继承中出现了比较严重的语义歧义问题(比如典型的钻石型结构)使得
多继承在实际的使用过程当中被刻意的回避。不知道你有没有用过owl(Object window libary)没有?
owl是唯一一个采用多继承的框架类库(至少是我见过的).但是owl采用了多继承以后导致了整个
框架的不稳定,当初学习owl的document/view时候被多继承弄的头晕眼花。自那以后,mfc,
owl的后继者vcl都不约而同的使用了单根继承的模型java,c#甚至因噎废食取消了多继承功能。
连大学里的c++课程也对多继承
壁而不谈(记得我们的老师在上c++课的时候说道多继承就说了歧义问题就没有内容了还告诫我们
不再万不得已不要使用多继承)。
这样就在一定程度上回避了多继承的歧义问题。但是多继承好处也被抛弃的一干二净.
如果用单根继承的方法装配汽车的思路就变成了发动机,轮子,骨架,控制系统都是从铁原子
继承下来的然后铁原子用不同的形态转变成各个部件然后因为都是铁原子派生的所以能够在把他们
组装再一起。这样车子是造出来但是我们的设计思路却变得的格外的怪异。为什么造汽车
非要从铁原子开始考虑。在这种方式下面我们使用了oo能够清晰刻画事物关系得好处但是却在没有更好的
办法解决不同对象之间的装配的问题。幸好是Bjarne给我们发明了template和gp这种独立于对象的思考方法
gp本身不需要对象的支持表现的独立和单一但是他又能抽象的刻画事物运动的本质。因此我们
就有了强有力的工具用多继承的方法来从新规划我们的设计思想。也就是我们用gp刻画描述独立的事物
运动模型,然后用多继承的模式去把他们装配到对象当中去。tempalte和gp提供了一个我们把
轮子,骨架,发动机区别看待的一种理论或者说一种理由。
因此我觉得gp和oo的共性在于抽象,而不同之处在于oo强调事物的关联或者说是共性
而gp强调事物的独立或者个性。我们之所以感觉oo正在趋向复杂和混乱是由于我们没有gp这种强有力的
工具。当我们有gp以后,oo的缺陷问题顺理成章得到了解决oo刻画世界的方式也就更加清晰和简单而不是
牵强复会把所有的东西都看成原子的后代。观察mfc和wtl,atl之间的区别就能知道这两种方式的区别。我觉得gosling,和海森堡都没有Bjarne那么有远见.
    另外一点我喜欢python不仅仅是动态语义,而是因为他的程序实在较为简洁。就像当初我抛弃
pascal的begin end转向c的{}一样。看了你写的bubble sort使得我更加确信语言简洁的重要。
     上次我们讨论gp和oo谈论到哲学,看到你的贴子觉得你的哲学素养还不错有点popper的证伪的味道。
不知道你对编程哲学怎么看的我的感觉既不是科学也不是哲学是一种不伦不类的垃圾。
     另外ce上面的python可以免费download可以到http://starship.python.net/crew/mhammond/ce/
去看看
     好了就谈这么多巴已经很晚了。希望能够看到你的尽快看到你的信。
Ian.King



[关闭][返回]