希望C,C++的争论(也许是程序设计里边最经典的争论了)永远持续下去,大家你追我赶,互相促进!
2010-06-03 17:23
357 查看
有竞争才有发展,呵呵!不过说句实话,C++确实到了该瘦身的地步了!
C++的精髓是抽象,C的精髓是简单具体,悲哀的是现实世界的东西抽象容易,但是做得好的抽象很难,并且事务往往是变化的,这也是为什么C++的程序也是要一遍又一遍的重构,改写,当然C也要,但是代价小得多啊!
举个简单的例子:关于人类的抽象
class 人:public 哺乳动物
{
private:
重载头;
重载四肢;
重载躯干;
重载位置;
重载身高体重等;
...
语言;
肤色;
国籍;
性别;
年龄;
父母配偶孩子等;
财产;
...
public:
重载走;
重载爬;
重载跳;
重载跑;
...
开飞机;
开汽车;
...
购物;
听音乐;
旅游;
...
}
属性和方法太多了,而且实际不是每个个体都需要其他个体的属性,你不可能搞一个囊括所有人属性的一个类吧! 比如有个人从小到大会经历很多,C语言可以简单的用函数表示,C++则要抽象,变化一次要抽象一次,比如1岁会走,2岁会说话,5岁会算术,7岁会写字,10岁会骑自行车,16岁会开汽车,18岁有女友,26岁有老婆...麻烦的是不是每个个体都一样!!!
我们的程序客户永远是人!人总是要变化!而且出乎你的预料,出乎意料的变化恰恰是C++最怕的事!都封装好了,这时候变就必须重新来过啊!如果不影响其他的还好,如果影响其他的部分就麻烦了!!!比如一个人移民了,那开汽车的方式也许得变,一个人瘫痪了,走路方式和原来不同了,啊,好烦!
所以一个好的C++程序员必须理论/经验/长远发展/实际情况综合起来能力很强,但是程序不能太复杂,否则资源不允许,现实情况是这样的人啊太少了,大家都是没啥长远考虑和规划的(包括C/C++),看看linux内核代码就知道了,Linus原始代码还有几行呢?重要的是重写的代价,C++重写的代价比C大多了,2倍不只,真的!实际情况可能更糟,具体可以参考我在C++论坛发的Hello World C++例程。
不过我觉得C++也不可能完全被取代,毕竟你上哪里找这样一个兼顾效率的面向对象的语言呢?还和C兼容? 物竞天择,适者生存啊,因为有了C++面向对象的思想,C语言也增加了很多新特性,比如面向对象的结构体,回调函数,C++也会反思这几年的些许歧途,去掉很多华而不实的特性,增加新的功能,并向更好的方向发展的。
如果哪一天两者的争论没有了,估计他们都会挂,被新的语言所取代!就像当年讨论步兵团与骑兵团一样,最终是机械化兵团获得全面胜利!战列舰与巡洋舰哪个好?都不是,航母最牛!
C++的精髓是抽象,C的精髓是简单具体,悲哀的是现实世界的东西抽象容易,但是做得好的抽象很难,并且事务往往是变化的,这也是为什么C++的程序也是要一遍又一遍的重构,改写,当然C也要,但是代价小得多啊!
举个简单的例子:关于人类的抽象
class 人:public 哺乳动物
{
private:
重载头;
重载四肢;
重载躯干;
重载位置;
重载身高体重等;
...
语言;
肤色;
国籍;
性别;
年龄;
父母配偶孩子等;
财产;
...
public:
重载走;
重载爬;
重载跳;
重载跑;
...
开飞机;
开汽车;
...
购物;
听音乐;
旅游;
...
}
属性和方法太多了,而且实际不是每个个体都需要其他个体的属性,你不可能搞一个囊括所有人属性的一个类吧! 比如有个人从小到大会经历很多,C语言可以简单的用函数表示,C++则要抽象,变化一次要抽象一次,比如1岁会走,2岁会说话,5岁会算术,7岁会写字,10岁会骑自行车,16岁会开汽车,18岁有女友,26岁有老婆...麻烦的是不是每个个体都一样!!!
我们的程序客户永远是人!人总是要变化!而且出乎你的预料,出乎意料的变化恰恰是C++最怕的事!都封装好了,这时候变就必须重新来过啊!如果不影响其他的还好,如果影响其他的部分就麻烦了!!!比如一个人移民了,那开汽车的方式也许得变,一个人瘫痪了,走路方式和原来不同了,啊,好烦!
所以一个好的C++程序员必须理论/经验/长远发展/实际情况综合起来能力很强,但是程序不能太复杂,否则资源不允许,现实情况是这样的人啊太少了,大家都是没啥长远考虑和规划的(包括C/C++),看看linux内核代码就知道了,Linus原始代码还有几行呢?重要的是重写的代价,C++重写的代价比C大多了,2倍不只,真的!实际情况可能更糟,具体可以参考我在C++论坛发的Hello World C++例程。
不过我觉得C++也不可能完全被取代,毕竟你上哪里找这样一个兼顾效率的面向对象的语言呢?还和C兼容? 物竞天择,适者生存啊,因为有了C++面向对象的思想,C语言也增加了很多新特性,比如面向对象的结构体,回调函数,C++也会反思这几年的些许歧途,去掉很多华而不实的特性,增加新的功能,并向更好的方向发展的。
如果哪一天两者的争论没有了,估计他们都会挂,被新的语言所取代!就像当年讨论步兵团与骑兵团一样,最终是机械化兵团获得全面胜利!战列舰与巡洋舰哪个好?都不是,航母最牛!
相关文章推荐
- 收集一些有意思的ASCII程序注释(持续收集中,希望大家踊跃贡献)
- 今天,我给大家介绍一些 c++常见头文件和模板,希望能给大家一些帮助!(第二次更新)
- 经典问题2:c/c++ 程序设计 ---i++问题
- C/C++语言经典、实用、趣味程序设计编程百例精解(3)
- C/C++语言经典、实用、趣味程序设计编程百例精解(8)
- 学习c++要了解的cin的几个输入函数为了让自己记住,也希望对大家有帮助,出错的话还希望多指教
- C/C++语言经典、实用、趣味程序设计编程百例精解(7)
- 经典问题:c/c++ 程序设计 ---赋值语句
- 经典问题7:c/c++ 程序设计 ---0、1串个数统计问题
- 希望大家多多评价,多多批评指正,互相交流
- 经典问题1 :c/c++ 程序设计 ---赋值语句
- C/C++语言经典、实用、趣味程序设计编程百例精解(1)
- C/C++语言经典、实用、趣味程序设计编程百例精解(2)
- C/C++语言经典、实用、趣味程序设计编程百例精解(9)
- 经典正则表达式(希望给自己和大家带来便利)
- C/C++语言经典实用趣味程序设计编程百例精解--大部分是自己写的(1)
- C/C++语言经典、实用、趣味程序设计编程百例精解(6)
- 经典问题8:c/c++ 程序设计 ---bit位逆转高效算法问题
- C/C++经典面试题(持续更新)
- 经典问题9:c/c++ 程序设计 ---基本数据处理问题