|
|
发表于 2006-1-3 16:33:00
|
显示全部楼层
Re:关于单件
关于后面的问题我还是拿不出教科书上的说法,因为设计模式和游戏编程精粹1都在单位,我个的理解是这样的,单件是确保一种类型支拥有唯一实例(附带的好处相对于全局变量是我们可以确定构造和解构顺序,确保在内存中的分配位置等等).其实你说如果我再写的时候注意一点也就不会有第二个实例了,当然C语言完全可以做到,从头到尾我们都没有必要引入c++的,或者最起码有些地方我们不必引入C++这等复杂而低效的东西。
为什么我们一定要用C++呢?
你可能只认为面向对象是一种工具,而不认为他是一种思想。
首先我想问一下,我们用计算机在做什么工作呢?
简单的说,我们再用计算机内部的数学去重构物理世界。
而数学的精妙之处,就在于到目前为止,似乎数学就是这个物理世界的完美抽象,目前还没有人能够解释为什么会是这样,但是早晚会解释的。
可能我说得太抽象了,举例子来说,现在数学家看的距离似乎比物理学家要远,数学家说那里会有一颗星星(推导),物理学家在之后却真的发现了这颗星星(归纳)。我们现在对于宇宙等领域的研究已经以数学为主,而物理似乎沦为对数学推导的验证手段。这正是因为数学是我们世界的完美模拟。
而现在的计算机模型却不是这样,其中有太多人为的演义,和我们的物理世界相差甚远。我们的计算机模型并不是对世界的重现,而只是某种外观上的模拟(我也糊涂了)。
我们公司的boss是OpenGL发明者之一,ATI前总裁,图形学先驱,基本上很多图形学的一些东西都是他发明的,反正是个牛人,只和我说过一次话,而且基本是骂我。
但是他提到,现在整个图形学的模型都是错误的,只有贴图是比较正确的,所以所有模型在将来都要从头建立,最终图形学的目的是让显示器里面的人物在你身边真实的移动。
至于为什么这么说,我得智商不够,你还是问他去吧。
我的理解是:比如我们所看到的现实世界是因为光线的存在,而在计算机世界里面因为硬件速度的关系,我们没办法实现光线跟踪。所以我门做的只是对世界某种程度的模拟,而不是重现这个世界。而当计算机硬件和设计思想进步到一定程度的时候,我们有机会实现对物理世界的重现。
跑了那么长的题,我想说的是在我看来面向对象是更接近对真实世界的重构(只是更接近,而不是完全的重构),比如说有一头猪,用汇编来说明的话可能是(这又一个舌头,吃饭时候会用,这又一个耳朵,听东西时候会用...<数据和操作都在寄存器里面进行>),用过程化语言说明的话可能是(它吃饭,它睡觉,他交配...<一堆函数>),用面向对象来说就是(这是猪这类型的一个对象<一个类的实例>)。
相对来说面向对象的思想更接近我们所生活的世界,不是么。随着计算机科学的进步完善,面向对象思想的重要性愈加凸显,最近你所知道最时髦的几种语言中,有几个是面向对象的呢?基本上都是吧,哦那个支持不完善的是PHP,那个只是基于对象的是javascript。lua和python不是很酷么都是动态的呢,静态的C#和java也不错了。其他的语言不也都是由面向对象的版本吗。你要是非说那老古董Ada什么的我就没辙了。
当然,我并没有说面向过程化语言和结构化语言消亡,就如同电视永远不能代替书和报纸一样,也不愿意争论C++是否比C好,离开实际的应用就如同哲学上争论孙子的功和墨子的守一样没有结果.
我只是说,面向对象,很酷,不是么,
object!why not?
===============================
附带说一句,我是个很不象话的人,很喜欢黑客精神,所以总是给自己安排喜欢什么不喜欢什么的阵营,我是反微软阵营,挺任天堂阵营,反对垄断阵营,支持linux阵营,丁磊很强阵营,盛大傻X阵营,C#不如java阵营,jsp不如php阵营,php万能阵营,xbox360日本买不出去真爽阵营,
软件工程、设计模式、面向对象特别好阵营。
你问我为什么说他好,这种事情就如同恋爱一样没有理由的,喜欢就是喜欢了。
但是因为现在做掌机,公司全都是c阵营,妈的天天被排挤 [em6]
===============================
设计模式的一个好处是 首先对相同功能的代码提供了统一的命名,类似微软的匈牙利命名法一样,不过更高一层,这样也便加大了代码的可读性。 |
|