C++和Java,绝不只是语法不同这么简单

          说到面向对象,我们的脑海中立马会涌现出C++,java,object-C 这几个大类的语言,甚至是C#。似乎看来,他们都是面向对象的不同实现而已(博主这句话就很C++了)。尤其对于初学者而言,很难显见他们之间的不同以及设计哲学上的差异,这种差异需要我们有过几年的编程经验,同时对几种语言都比较熟悉的时候才能够深刻的感受到。

      以前有人说C++就是强化版的C++,现在应该没有人继续有这种思想了吧。之所以会有这种思想,就是没有真正心领神会C++的设计哲学,而只是将C++当做一个对C语言进行过封装和代码构造优化的语言而已。其实不然,C++和C是两个完全不同的世界,新东方的创始人之一的王强,曾在美国贝尔实验室工作。他曾谈到C与C++之间的区别,就曾提到这是两个完全不同的语言,只是仅仅有部分语言相似而已。带来对事物的理解也更是不同的,C++的世界观本质就是面向对象的,而非C语言结构式的世界观。我们可以很大胆的说,C++的设计哲学是要高于C语言的,它的出现不是仅仅为了填补C语言在大工程方面构造能力的不足,而是创造了一种新的语言和思想,用以工程化设计和实现。

     曾有人诟病,说C++的效率低于C语言,而这个问题早已经被验证了,同样的函数,由于C++内部早已经经过十分巧妙的设计和优化,效率不仅不低于C语言,甚至在很多方面会高于C语言的执行方式。

     说完了C语言和C++的不同之后,现在来说说java和C++。我觉得讨论他们之间的热度已经超过了以前对C语言和C++之间的争论了。喜欢java的人说,java 才是真正的面向对象语言,C++属于半面向对象,甚至还扬言以后C++会被java取代。java由于其良好的内存管理机制,导致了程序员获得了生产力的解放,可以进行更多工程方面的工作,而不用陷于代码的结构中。今天我们不说语法差异,我觉得对于两种语言都使用过之后,微小的语法差异并不是他们之间最大的不同。而两个语言之间的使用感受不同,才是他们真正的不同。

    1.面向对象思想,对于java而言,每一个操作都是由对象来执行完成的。即所有的操作执行都是由对象这个发起的。而C++则不同,除了以面向对象作为完全的主体之外,还保留了一些较为灵活的设置,可以采用非面向对象的方式执行,这大概是由于它兼容C语言才有的特殊性质吧。

    2.内存管理机制,Java的内存管理是java语言自身进行管理的,它依靠的是一个线程优先级很低的一个线程对内存进行监控,当有内存长时间处于未使用,则对其进行回收。而这一点,C++把这些留给了程序员自己。这个虽然看起来是一个极大的灵活度,却也是导致了C++特别难学的一个关键因素。

   3.第三方库支持,由于java程序员的人数在过去的几年中暴烈增长,导致市场上对于java的一些库市场也十分丰富。这一点,C++则显的要寒酸一些了,由于C++的库主要都是一些底层的应用的API库,而底层设计和开发的需求相对于应用而言,要少很多。所以C++的库支持相对要少一些。

   4.对程序员的灵活度,这个java是没有的,由于java主要用作应用层开发,其本身的封装性,让程序员在酣畅淋漓的编程中也无法了解到底层的一些实现机制。同时,程序员无法直接去操作编译器,连接器等等。相比较而言,C++则是方便的多,它甚至可以修改函数执行的入口,函数定义的时间以及其他更为复杂和灵活的操作。

   5.执行效率,不得不说,这个可能是争论最多的一个地方了。首先,何为效率?是指代码运行的速度?还是指我们总得人力成本时间占比?单纯从一两行代码中,我们当然会说C++效率远胜java。但是,有没有考虑投入的人力成本和后期的维护成本.由于C++的高深艰涩,其维护成本更是与工程师的水平相关极大,这个成本算起来的话。或许,就不能轻易下结论了。


    总结,其实两种语言都由来已久,对于程序员而言,或许对技术的偏执会让你喜欢某一种语言而诟病另外一种语言。而这种思想本身就是错误的,每一种语言都有他自身的设计哲学,如果只是因为个人使用经验不足或者对其了解程度不够深入就妄下判断,这无疑会阻碍自身的进步。

   最后说一句,人生很短,来不及体会那么多,我要去学python了,慢了就赶不上了。


你可能感兴趣的:(编程技术)