游戏开发论坛

 找回密码
 立即注册
搜索
楼主: instemast

面向对象语言的语义学中的意味不明之处,剧本中常出现

[复制链接]

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
 楼主| 发表于 2008-9-29 10:34:00 | 显示全部楼层

Re: Re:面向对象语言的语义学中的意味不明之处,剧本中常

帝释天: Re:面向对象语言的语义学中的意味不明之处,剧本中常出现

楼上的,我觉得OO的自由之处恰恰在于“按人做事”,就是说,只管我能做什么,我做完了给谁接着做,我不管。...


这样做只能编写一些中低级的程序,无法编写大型健壮的程序----除非你雇几十个到几百个程序员花半年时间调试,才能勉强发布,但一旦需要加入新功能时,又要忙活好大一阵子。

我花一个月时间重写UI就是这个原因。

为什么我手头的引擎是 Engine->GetTextureSize( tex_id, ... ) 这样的格式,就是这个道理。不过,它只考虑了开发方便,没有考虑到用户的方便。

定律:

在有限的时间和人力内,用你说的这种方法,绝对开发不出来windows等操作系统

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
 楼主| 发表于 2008-9-29 10:48:00 | 显示全部楼层

Re: Re:面向对象语言的语义学中的意味不明之处,剧本中常

帝释天: Re:面向对象语言的语义学中的意味不明之处,剧本中常出现

楼上的,我觉得OO的自由之处恰恰在于“按人做事”,就是说,只管我能做什么,我做完了给谁接着做,我不管。...


你去打一场篮球,但是没有裁判,你看看这个球是不是能够打下去。

你们单位如果没有领导,你看看你们单位能不能长期存在下去。

我曾经和别人在草稿纸上模拟《太阁5》玩,结果----玩了不到10分钟,一片混乱。

你知道你扔一个漂流瓶下去,会对后面的人有多大影响吗?

在基于Update的游戏开发中还好说,

如果是基于event的软件开发,比如,
this->AAA = false;
比如是 .net 类库,他就会产生event来进行通知。
而别的很多类,都必须处理这个问题,否则将导致严重出错。

但是不论是不幸的Event模式,还是比较幸运的Update模式,
你说的“漂流瓶......”方式,都将导致类之间的紧密耦合,每新加一个类都是一个挑战。

0

主题

769

帖子

1052

积分

金牌会员

Rank: 6Rank: 6

积分
1052
发表于 2008-9-29 12:52:00 | 显示全部楼层

Re:面向对象语言的语义学中的意味不明之处,剧本中常出现

苦海无涯啊楼主,回头吧...

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
 楼主| 发表于 2008-9-29 15:21:00 | 显示全部楼层

Re: Re:面向对象语言的语义学中的意味不明之处,剧本中常

无名剑: Re:面向对象语言的语义学中的意味不明之处,剧本中常出现

苦海无涯啊楼主,回头吧...


真奇怪阿,如果研究稍微近似自然语言是“苦海”,
那么那些搞“自然语言处理”的岂不是“十八层地狱”?

自然语言处理有何用? 1 难度太大 2 不如找一个活人翻译

而我想,把现有的高级计算机语言,稍微向自然语言方向,拔高一点,不是什么多难的事情,这比自然语言处理简单1000倍。

回头?回头干什么去?写枯燥无聊的代码?或者转向管理(那不是自己力量解决问题)?

计算机语言从 机器语言 -> 汇编 -> 高级语言,
但是这么长时间,一直没有“更高级语言”出现。。。

你说我讲的又没有道理?
我研究这些,受益的不还是我们所有程序员?

0

主题

12

帖子

26

积分

注册会员

Rank: 2

积分
26
发表于 2008-10-2 04:51:00 | 显示全部楼层

Re:面向对象语言的语义学中的意味不明之处,剧本中常出现

oo的本质是什么?oo的本质是约束。通过语言本身的约束,强迫程序员或者诱导程序员使用良好的代码风格。
oo的精髓是什么?各种设计模式。设计模式的的目的是什么?简化问题,降低问题的复杂度,重用以往的模型。
oo语言与其他语言的区别是什么?我认为是编程模型的改变。以及是否解决了通用的问题----内存管理。gc是oo语言的标志。
c++严格说来,不能算是oo语言。因为它没有集成gc,没有一个内置的异常系统,甚至没有一个统一的字符串对象。
gc存在与否,对代码风格有巨大影响。
设计模式的基础是什么?最难理解的模式是什么模式?创建型模式。几个工厂模式实际上代表了oo的所有精妙之处----依赖抽象,不依赖细节。创建型模式,决定了程序的依赖点放在什么地方,它是软件架构的骨骼。spring之类的架构,解决的最主要问题,就是类的创建问题。
很遗憾,c++不宜应用工厂模式,因为无法自由的分配和回收内存,大量的代码都用来解决内存问题。同时,代码结构也严重变形。如何new以及new完了什么时候delete的问题,是c++最复杂的问题。
如果有智能指针的辅助,似乎可以部分解决这个问题,然而,智能指针无法解决循环引用的问题,无法检测到这类问题。这类问题的本质是什么?对象图的遍历。除非从语言的根本入手,每个创建之处都从代码树中将引用关系记入对象图,否则,无法解决此类问题。这就是为什么会出现java和c#的原因。
windows开发未来的10年,属于c#。不为什么,成本决定一切。

0

主题

12

帖子

26

积分

注册会员

Rank: 2

积分
26
发表于 2008-10-2 05:33:00 | 显示全部楼层

Re:面向对象语言的语义学中的意味不明之处,剧本中常出现

oo的优势是什么?代码重用吗?不是。用函数也可以代码重用。剪切粘帖也可以代码重用。
oo的优势,是在于它有足够的手段,去强迫或者诱导开发者写出依赖关系更简单的代码。oo的优势,不在于加法,而在于减法。它提供了足够的约束手段。
封装,是重用的基本手段。封装之后,隐藏了实现的细节,通过减少使用者对细节的访问范围,达到了简化依赖关系的目的。
继承,从代码重用的角度来说,继承并不重要。剪切粘帖也可以实现跟继承同样的效果。然而,它通过减少了软件的重复代码,达到了维护更加简单的目的,减少了冗余。更重要的意义,在于接口的继承,接口的继承,简化了软件组件之间的依赖关系。
多态,oo最复杂最巧妙的部分。面向对多个实现的共同特性的抽象,面向接口设计,是多态的本质。而多态又与类工厂息息相关。如果说原来的代码是n个接口a的实现类和m个接口b的实现类的关系,抽象之前,复杂度是n*m,抽象之后,是n+m。oo的本质,在于对复杂问题,它可以快速收敛其复杂度。
没有一个gc,就无法自如的应用类工厂,所以就无法真正应用多数设计模式。因为无法隐藏对象的创建过程,从而真正解耦,所以,c++的oo,其实是多此一举。真正的oo,还是要用c#这样的语言才能实现。

c语言不能oo吗?不,它也可以oo。定义一个结构,加上一些函数指针,它完全可以模拟oo的行为。它与oo语言的区别,在于,第一,它没有足够的减法,约束开发者写出良好风格的代码。第二,它没有gc。开发gc是高难度的任务,大部分公司都没有这样的实力。第三,设计之初,它就没有考虑到字符串的问题(不要小看这个问题,想想那么多溢出是怎么来的),第四,它的编译速度太慢,依赖关系过于复杂。这些都妨碍它成为一个好的开发工具。第五,它和c++,对回调的支持都不够好。回调和正常的调用,本来是一样重要。对于类库开发来说,回调应该是极为常用的。但是,由于c和c++都没有语言层的支持,所以回调的运用远远不够。这就是工具影响了代码风格,而代码风格,影响了架构。
C语言,是编程语言早期面向硬件的产物,它的目标,仅仅在于解决具体问题。c语言,其实仅仅是汇编的升级版。而c#这样的语言,是编程发展到一定阶段,面向巨大的工作量和复杂度的产物,它的目标,在于简化问题,解决复杂问题。至于c++,很抱歉,它是个中间产物,在c#出现之后,它已经没有必要存在下去了。驱动开发和操作系统开发有c,而应用开发有c#,c++不再有什么优势。它现在的应用,只不过是一种惯性。从delphi和bcb的衰落,就可以看出这一点,市场不再需要这种类型的语言了,而且它也没有能力再做出什么创新。本身它就已经够麻烦了。倒是d语言,有接班的希望,可惜没有大公司的支持。

将来的趋势,可能是gc集成到操作系统的内核,从而简化操作系统和驱动程序的开发。未来的操作系统,可能就剩下一些算法,一切都是在抽象的基础上进行的。从现在嵌入式操作系统的演变来看,有这样的趋势。比如,jnode,.net macro framework,都是嵌入式操作系统的例子,从系统内核中就集成gc,抽象机器的特性,便于操作系统移植到不同的平台。

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
 楼主| 发表于 2008-10-2 08:34:00 | 显示全部楼层

Re:面向对象语言的语义学中的意味不明之处,剧本中常出现

回楼上的:

你说的是很对的。

可惜,包括曾经的我在内,有些人错误地运用OO。
OO应该是:模块,类,实例
而不是:东西,对象,物体

4

主题

38

帖子

40

积分

注册会员

Rank: 2

积分
40
发表于 2008-10-6 08:46:00 | 显示全部楼层

Re: Re: Re:面向对象语言的语义学中的意味不明之处,剧本中

instemast: Re: Re:面向对象语言的语义学中的意味不明之处,剧本中常出现



你去打一场篮球,但是没有裁判,你看看这个球是不是能够打下去。

你们单位如果没有领导,你看看你们...

大海就是裁判呀,那大海也是要我们去构建的。漂流瓶飘得够不够快,够不够准确,需不需要消息路由,都是我们要构建的。上帝的归上帝,凯撒的归凯撒,不幸的是,我们既要做上帝,构建那个大海,又要做凯撒,往海里扔漂流瓶。

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
 楼主| 发表于 2008-10-8 18:20:00 | 显示全部楼层

Re: Re: Re: Re:面向对象语言的语义学中的意味不明之处,剧本

帝释天: Re: Re: Re:面向对象语言的语义学中的意味不明之处,剧本中常出现


大海就是裁判呀,那大海也是要我们去构建的。漂流瓶飘得够不够快,够不够准确,需不需要消息路由,都是我...


的确如此啊。某种意义,游戏开发比搞数控的还要难,前者还需要实现机床,后者只需要用现成的。这就是我在帖子《编程》中指出的
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-21 04:19

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表