面向对象哀悼会

 面向对象哀悼会

时至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++这些所实现的类,继承、多太、接口什么之类的东西,不过是累赘。

为了目的不择手段
为了手段忘记目的

明明能直接简单的完成,非要弄一大堆的可有可无的抽象。
就一个文本查看器,就弄出代理、工厂啊还加上一大堆的抽象。
这值得?

[size=24px]面向对象是思想,不是类[/size]

路在何方

路在何方?
路在脚下。

一步一步走,再远的地方也能到。

好像这篇帖子,我只是吐槽了类。
确实,因为类真的是累赘。
(你也肯定有过,用C++写程序,编译时那些不堪入目的错误和不堪回首的查错过程,能让你精神失常大小便失禁。只有C++能这种把人送进精神病院的能力。当然,大部分都是因为类,还有...template)

其实吧,我觉得C++用不用类都没事。
C++的存在价值只是template。

C嘛,你想函数式,C就能函数式。你想对象式,C就能对象式。

Java?封装的方式不错,很合理。

当然:
面向对象是思考方式
和语言无关。

面向对象的路,在何方?

 

转自:http://wz.csdn.net/item/4088440/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值