论坛首页 编程语言技术论坛

朴实的C++设计

浏览 55078 次
该帖已经被评为精华帖
作者 正文
   发表时间:2010-08-13  
15000行的代码,你怎么玩都行...
0 请登录后投票
   发表时间:2010-08-13  
hatedance 写道
jimmy_c 写道
hatedance 写道
1 OO的性能肯定比PO低。因为OO的机制比较复杂。比如继承和多态,导致随便调用一个函数都有可能要找遍所有的父类有没有对应的函数。

谁说的?你说的是script不是C++吧?

我说的是运行时才能确定的多态。

呵呵,你没用过C++。鉴定完毕。
0 请登录后投票
   发表时间:2010-08-13  
jimmy_c 写道
myan 写道
...而这个新的世界观,其实并不太经得起推敲,不但不同的人有不同的看法,而且过于繁复易错,而且会使开发者偏离软件开发的根本目标,转而去构建应用领域中的概念体系...

这两句话是精髓。不过我有两个问题:
1. 封装/继承/多态只是一种选择而不是全部。我觉得方法本身不存在对错,而错误在于开发者建立这种繁复的类体系的选择。
对于C++,我更倾向于一种混合式、渐进式的编程风格。只有时间检验过,用户检验过的类体系才是某种程度可信任的,纯概念性类体系,除了算法库,是很难有通用性的。
还是XP的概念,代码是变化的。变化是唯一不变的东西。
2. 什么是“好的”世界观呢?语言、编程风格、范式都不是永远正确的。不同开发者总会有不同的选择。一个Web开发人员,和OS开发人员,图形图像开发人员,以及骇客/安全开发人员,他们对于开发模式,和编程技术的体验会有很大的区别,这决定了他们对于开发技术的喜好。我不认为这点上Linus就是对的,或者楼主是对的,又或者我是对的。每个人有不同的开发体验,也决定了他们采取的开发技术。
从楼主的例子说,我的结论是,他成功的地方是在于对于代码和测试用例的仔细推敲,而不是采用了哪一种语言风格。采用纯对象式风格的好处,只不过是对一个初级水平的团队更容易理解和把握而已。
归根到底,是开发者的技术经验,对客户的理解,以及对于产品的付出,决定了他能否开发出“好的”产品。其实语言本身是相对次要得多的东西。

jimmy:
你观点和楼主显然是不同的。你觉得纯面向对象范式太简单了,只是满足初级水平。所以你选择多范例混合编程。
而lz的帖子显然是要说C++太复杂,他只想朴实一些取其中的一小部分就满足了。

我觉得你们代表2种风格。对于同一个web系统,有的架构师喜欢用一种语言实现(ruby,java,php等都能独当一面),也有的架构师喜欢用php,flex做前台,java做后台,python做etl,...所谓各尽其能。
能集大成者,显然功力要很深厚才行。普通人精力有限,只能专攻一向。
0 请登录后投票
   发表时间:2010-08-13  
Solstice 写道
对于 C++ 的四种范式,我现在基本只把它当 better C 和 data abstraction 来用。OO 和 GP 可以在非常小的范围内使用,只要暴露的接口是 object based (甚至 global function)就行。

这点我是同意的。我更倾向于OO的类框架应该成为一种Refactor的结果。也就是说,如果我们不断地优化代码,得到了几个有相互联系的类,那么就把这些类作为一个可以局部使用的抽象。类本身没有错,错误的是在使用它的时候不分语境、场合,随意地使用。这样就很容易把一些本该限制在一定范围使用的概念给扩大化。
不过我不认为函数和object based的方法就不存在同样的问题。误用是没有国界的。比如myan以前说过的用C++编程,用C做接口,并不能真正解决问题。其实函数做接口不是本质问题,真正关键地是namespace/package,以及动态库的边界能够真正地组件化。也就是你的接口能够封装内部的实现,不要把局部概念扩大化。

0 请登录后投票
   发表时间:2010-08-13  
hatedance 写道
jimmy_c 写道
myan 写道
...而这个新的世界观,其实并不太经得起推敲,不但不同的人有不同的看法,而且过于繁复易错,而且会使开发者偏离软件开发的根本目标,转而去构建应用领域中的概念体系...

这两句话是精髓。不过我有两个问题:
1. 封装/继承/多态只是一种选择而不是全部。我觉得方法本身不存在对错,而错误在于开发者建立这种繁复的类体系的选择。
对于C++,我更倾向于一种混合式、渐进式的编程风格。只有时间检验过,用户检验过的类体系才是某种程度可信任的,纯概念性类体系,除了算法库,是很难有通用性的。
还是XP的概念,代码是变化的。变化是唯一不变的东西。
2. 什么是“好的”世界观呢?语言、编程风格、范式都不是永远正确的。不同开发者总会有不同的选择。一个Web开发人员,和OS开发人员,图形图像开发人员,以及骇客/安全开发人员,他们对于开发模式,和编程技术的体验会有很大的区别,这决定了他们对于开发技术的喜好。我不认为这点上Linus就是对的,或者楼主是对的,又或者我是对的。每个人有不同的开发体验,也决定了他们采取的开发技术。
从楼主的例子说,我的结论是,他成功的地方是在于对于代码和测试用例的仔细推敲,而不是采用了哪一种语言风格。采用纯对象式风格的好处,只不过是对一个初级水平的团队更容易理解和把握而已。
归根到底,是开发者的技术经验,对客户的理解,以及对于产品的付出,决定了他能否开发出“好的”产品。其实语言本身是相对次要得多的东西。

jimmy:
你观点和楼主显然是不同的。你觉得纯面向对象范式太简单了,只是满足初级水平。所以你选择多范例混合编程。
而lz的帖子显然是要说C++太复杂,他只想朴实一些取其中的一小部分就满足了。

我觉得你们代表2种风格。对于同一个web系统,有的架构师喜欢用一种语言实现(ruby,java,php等都能独当一面),也有的架构师喜欢用php,flex做前台,java做后台,python做etl,...所谓各尽其能。
能集大成者,显然功力要很深厚才行。普通人精力有限,只能专攻一向。


其实从技术上来说,我认为我的观点和楼主的差别有限。如果做同样一个系统,很可能我的方案选择是和他相同的。
我所不同意的,是楼主表述上会给很多初学者带来的误解,比如最初的几个回帖,让人感到又看到了Linus振臂一呼,无数炮灰小弟蜂拥而上的情景。
“能集大成者,显然功力要很深厚才行。普通人精力有限,只能专攻一向。”的观点我是不同意的。如果学不懂C++,去用C好了,还有Java/C#/...一大堆的东西可以选择。本来C++的学习曲线就是很陡的。既然做出了这样的选择,那又连一些基本的东西都不懂,虚函数的概念都搞不清楚,设计模式是什么都不清楚,还不虚心学习,满足于反过来对一些自己都不理解的概念说三道四,那只能说自甘下乘,很难有进步了。
我并不是C++的粉丝,这种语言的问题很多,但一来目前还没有一种语言真正达到完美,甚至是达不到我理想中方便、强大的需求;二来C++真正的问题也并不是楼主所说的那些,个人以为。
0 请登录后投票
   发表时间:2010-08-13  
Solstice 写道
总之,继承和虚函数是万恶之源,这条贼船上去就不容易下来。不过还好,在 C++ 里我们有别的办法:
http://blog.csdn.net/Solstice/archive/2008/10/13/3066268.aspx

托Linus的福,现在很多人都在说OO是条贼船,上去就下不来。
不过个人以为,template和GP的方法对代码的污染性更大,不知道过几年楼主会不会也想从这条贼船上下来呢?
当然喽,新技术总是好的,老大说的话总是对的,切记切记。
0 请登录后投票
   发表时间:2010-08-13  
特别喜欢周爱明的《大道至简》,实用为王道,呵呵
0 请登录后投票
   发表时间:2010-08-16  
jimmy_c 写道
Solstice 写道
总之,继承和虚函数是万恶之源,这条贼船上去就不容易下来。不过还好,在 C++ 里我们有别的办法:
http://blog.csdn.net/Solstice/archive/2008/10/13/3066268.aspx

托Linus的福,现在很多人都在说OO是条贼船,上去就下不来。
不过个人以为,template和GP的方法对代码的污染性更大,不知道过几年楼主会不会也想从这条贼船上下来呢?
当然喽,新技术总是好的,老大说的话总是对的,切记切记。


template 和 GP 我用得不多,只在非常局部的地方使用过。没有基于 GP 来做整体设计,谈不上上了贼船。
0 请登录后投票
   发表时间:2010-08-16  
拿蜥蜴去模拟恐龙的行为,显然是一种愚蠢的做法。
0 请登录后投票
   发表时间:2010-08-17  
lt0604 写道
拿蜥蜴去模拟恐龙的行为,显然是一种愚蠢的做法。

没错,但是拿“爬行动物”作为二者的抽象,显然是一种可行的方法。
0 请登录后投票
论坛首页 编程语言技术版

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