面向对象哀悼会时至2011,依然是编程领域发展的时候。
Java已然居高临下,众语言莫不俯首称臣。
唯有第二位的C,面对如此强势依然高位。
Java极度忌惮,似这般旧东西,几十年不倒,之为何也?
再看着第三位的C++,却是十分不解。
Java不解,之立乎C之上,而屈居C之下,何也?
C不语。
良久,C++一声嗟叹,述说衷肠。
只听C++道:
天出神物,名计算机。
不朽之躯,比之万寿。
善算万物,化为有无。
有无一位,一组有八。
八位之长,二五六数。
组而又组,数之再数。
既能明物,须有灵心。
数算是非,之谓央帝。
统领群臣,入源出文。
人能记事,或漏巨细。
此物善记,上天下地。
日月乾坤,莫不能存。
而之天物,何以行事。
编撰程序,令其执事。
此法却难,难以为大。
有能人出,造其译器。
之为开天,为后成事。
人之庸溺,不欲久持。
有能者出,立其新语。
此语浩荡,出天入地。
自贝尔来,而行天地。
...
这就是C,编程界真正的开端。
过了一段时候,又有面向对象。
C也用之。
化身而成C++。
本以为能成大事。
未想今之世界,面向对象已然临死。
吾C++,难鸣于林也。听完C++之言,Java似有不屑。
Java道之:
汝之所云面向对象临死,吾不敢苟同。
在下之位,为假乎?
又云,汝之不伦不类,不似我般纯对象。
自然病之,有何所叹。C依然不语。
Java心想,这般旧物,怕是不敢言语。然而Java不知其广阔。
万亿设备,尽数C之领域,计算机不过其中之一。
而Java者,不过如此。面向对象越失败,Java就越长久因为Java根本就不是真的面向对象,面向对象这东西,与它何干?
Java不过是强制所有东西都用来表达。
类是根据面向对象而来,面向对象却不需要类。
Java完全限制了开发思想。
令其开发者一切以类思考,却不是以对象思考。
而今面向对象黯然,Java却不动如山。
这就是证明Java根本就不是面向对象的灵魂。
Java的灵魂只不过是强制性的类。
和真的跨平台。
面向对象再怎么死,与Java也没半点关系。
有云Java为面向对象,确实,太纯了,纯到只有类。
但是类并不是面向对象的一切,不过是冰山一角。
但是Java不会死。
不是因为这种强制性的类表达。
而是因为跨平台。
如果不是因为类,恐怕也没C什么事了,底层都可以考虑了。
但是现实如此。
C依然是C。
面向对像却死。
“纯”面向对象的Java却不动如山。C++唯一的用处C++说自己是面向对象的,Java笑了。
C++说自己是效率很高的,C笑了。C++就一个不伦不类的东西
说它面向对象,只不过在C的基础上加了类这么个东西。
用C++写程序,你用不用类完全没关系。底层有C,高层有Java,C++在哪里?但是,C++真的如此吗?NO
C++的优势根本就不是所谓的面向对象,
那累赘似的类,根本就是附加品。C++的灵魂,是template
你能想象一个系统,代码中上千上万的不同的类型,只需要
array<long> data[100];
就能改变所有关于array的实现。
你能想象吗?这,只是冰山一角C++开创了什么?是元编程什么是元编程?就是编程的编程。不过一行代码的改动,就能产生完全不同的程序。函数?类?结构?...
只要你想,什么能行。我不说多了,template牵涉的太多了,涉及的思想太广,在下也下掌握不全。大家看看STL,就知道了。
STL也不过是只用了template其中几个功能。还没涉及到真正的元编程。
不过光类型无关这一点就够狠了。
Java?
一个类就搞定了,Object还可以当泛型呢。
呵呵,你用Java就知道,和template不是一个级别的。C++是在面向对象的时候出来的。
C++本身的对象支持嘛,不评论。
不过C++有一个异常强大的东西:template。
在template面前,所有语言都得跪下。
当然,用template的开发人员是最早跪的。
(尼玛这个开发难度,加上C++原本的一条编译Error弄死你的惯例...伤不起啊)
但是嘛,真的用template开发了系统后。
才会明白什么叫复用,什么叫模式,什么叫泛型,什么叫元。
只有template。类?那是个什么东西?一个附属品。什么是面向对象所谓的面向对象,就是面向现实中的关系。
所谓的面向对象编程,就是尽可能以人的思考角度来编程。我想说,胡扯。你说你思考的时候是对象式思考吗?
其实都是过程。
不过是并行+串行的多线程群。语言中的对象Java不说了,没意义。先说C。C中要表示一个对象,比Java/C++要容易方便简单和直接。
一个人:
struct ren
{
    char *name;
    int  age;
    int  sex;
};
这就非常直接了。如果用类累赘似的搞ADT,反而不方便。
(推介看代码大全Code Complete,此书教会了什么是程序,该怎么写)
很多时候,越是复杂混乱的功能,C越是做的好。
就说函数指针,就这函数指针,可是GUI库的事件基础,Window的事件基础。
对了,Java去除了指针,也无所谓,反正Java只有类。
C是不需要弄类啊,过度封装啊这些的。
C需要考虑的,是怎么做更直接、更方便、更有效率。
面向对象无处不在,C没说自己面向对象。
但是C却可以面向对象。
看看Window32的SDK API
就知道C是怎么面向对象了。
是真正的面向对象。
类不过是一种累赘。
C也可以做ADT,更直接,优雅,炫丽。
类型/结构定义 + 存/取子程序 + 操作模块
就能实现一个ADT,而且十分容易修改,可扩展说白了,Java和C++这些所实现的类,继承、多太、接口什么之类的东西,不过是累赘。为了目的不择手段
为了手段忘记目的明明能直接简单的完成,非要弄一大堆的可有可无的抽象。
就一个文本查看器,就弄出代理、工厂啊还加上一大堆的抽象。
这值得?面向对象是思想,不是类路在何方路在何方?
路在脚下。一步一步走,再远的地方也能到。好像这篇帖子,我只是吐槽了类。
确实,因为类真的是累赘。
(你也肯定有过,用C++写程序,编译时那些不堪入目的错误和不堪回首的查错过程,能让你精神失常大小便失禁。只有C++能这种把人送进精神病院的能力。当然,大部分都是因为类,还有...template)其实吧,我觉得C++用不用类都没事。
C++的存在价值只是template。C嘛,你想函数式,C就能函数式。你想对象式,C就能对象式。Java?封装的方式不错,很合理。当然:
面向对象是思考方式
和语言无关。面向对象的路,在何方?

解决方案 »

  1.   

    struct ren
    {
      char *name;
      int age;
      int sex;
    };
      

  2.   

    此篇是教主的<<神论之二:面向对象之死>>,上篇是"Java居然不能用long当数组下标"
      

  3.   

    我很喜欢C++的template,不过,楼主说C++重点在template而不是class,我觉得这想法还是属于那种对面向对象不太了解的层次……
      

  4.   


    public void disbeleve(){
          
    }
      

  5.   

    这就是C,编程界真正的开端。笑死人!那FORTRAN LISP COBOL BASIC 都是什么?现在不知道天高地厚的小朋友真敢说啊!这也难怪,再垃圾的学校都有计算机系,在加上培训的,垃圾量产化了。
      

  6.   

    这么高深的文章不顶都对不起Party
      

  7.   

    Java也不是真正的跨平台,大家编的Java程序,必须附加上JVM才能跨平台。而我认为,真正的跨平台是,任意编码,不带任何附加条件和东东,直接就能处处运行,才叫真正的跨平台。
      

  8.   

    程序的实现,中间加上那么一层class,复杂度就加一个指数C是函数式思维,复杂度很低,易编写易维护
    C++对象式思维,写完调试糊弄过去,维护的人哭了
      

  9.   


    你拿一些C写就的系统和C++写就的系统比,发现C的复杂度低,可是你没说系统本身的复杂度啊。C++搞定的都是Office,Lotus Notes这种千万行级别的代码。C搞定的,都是10w行级别的,比如Linux内核什么的。可千万别以为写个OS就是多了不起的事情
      

  10.   

    肯定死不了。有几万亿美元的Java系统还在运行中,你想会死吗?
      

  11.   

    http://shop1507805.paixie.net/自己进去看看吧!
      

  12.   

    写的不错啊。
    C++我觉得吧能够锻炼心境,学到一定程度能够提高学习理解能力。
    模板是图灵完备的,即它算是一种计算机语言,而这语言能够在C++编译期(从开始编译到编译结束)完成程序计算。
    C++的缺点是太复杂和庞大,优点也是。
    面向对象死没死其实不重要,面向对象本生亦不是银弹,只是为了适应时代发展的需要的方法论,一些语言提供了实现并提高了整体开发维护效率。
    程序员是沟通现实世界和数字世界的魔法师,真心喜欢。
      

  13.   

    java不是完全的面向对象,而现实中的对象是何等的博大精深 !
    在没有真正的面向对象的语言出现的时候,java依然是霸主!
    因为这个世界上牛人毕竟是少数!
    对c++不熟悉,但对于模板编程的思想表示感兴趣
    猜想更接近面向对象的语言会不会在出现在华夏!
      

  14.   

    LZ ,根本就不懂如何优雅的 编程.....编程对LZ 而言 只为 把程序做出来.....如果 把 编程做成 艺术, LZ 就是在 胡说八道了....当然 LZ,不是站在艺术的 角度,而只是 一个 代码民工的角度,所以,LZ也 不算是胡说八道。呵呵
      

  15.   

    JAVA ,会死的。 绝对在C++ 之前
      

  16.   

    lz既不懂面向对象,更不懂c++
      

  17.   

    别人笑我太疯癫,我笑他人看不穿。楼主说的有一定的道理,我做c多年,最近一年接触c++,发现c++的复杂度不是教科书上讲的那么简单,有时候觉得真的没必要这么复杂,能一句话表达清楚的,非要用诗歌来朗诵一遍,呵呵。
      

  18.   

    有人说这只是语言不同的差别,说我还比这些,真幼稚。
    我笑了
    我比的是语言之间的思想。
    C的自由与直接,C++的范型、元编程,Java的封装。还有人说我对于编程只是为了把程序做出来。
    我哭了。
    我一直以来坚持认为编程是一种艺术。
    把我比作国内那些拖控件的?
    这可伤透吾心。最后,我想说
    面向对象只有理论,从80年代到现在。
    没有任何一个技术实现了面向对象。
      

  19.   

    表示基本看不太懂。因为我都不会。
    正在学习java中
      

  20.   


    装B男,你别说写OS,你就写个内核出来试试? 就写到minix那种水平就够了,看你这样就估计只会吹水了
    office有千万级别的代码? 知道nt源码才多少行么?不到500W行……您老继续装B吧。某人曾说过,OOP就像流水线工作,coder就是流水线工人。而用C或ASM就像一个雕刻家,一刀一割,一切尽在掌握中一切OOP都是纸老虎
      

  21.   

    呵呵,可以看出,楼主是c++程序员,对java的地位,羡慕嫉妒恨,所以来发泄一下。不过在下不敢沟通oop+aop=perfect
      

  22.   

    表示一个月过的真快,
    楼主又到了那几天上个月的主题是
    java的数组下标的非常严重的问题,异常不爽
      

  23.   

    你出本书算了,名字就叫JAVA VS C与C++
      

  24.   

    不过就是一个概念,和谈死活?
    兄弟我没看过《设计模式》之类的教你如何编程的书,现在我们公司java项目的框架就是我设计的,没有ssh啥的,从数据库访问到页面模板,无一不是出自兄弟之手。
    归根结底还是你对编程这件事情的理解,兄弟一直强调“把自己的代码当成艺术品”
      

  25.   

    施主,你别写程序了。回去写湿吧。我听说过java,看见别人学javajava很火啊。。我只是笑而不语
      

  26.   

    c++的面向对象,从编程角度上说一般是为了使用运行期多态;而用template则是为了编译期多态;根据需要选择。另,元编程不是你想玩就能玩的起来的!