游戏开发论坛

 找回密码
 立即注册
搜索
查看: 7977|回复: 20

万物皆为一个函数

[复制链接]

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
发表于 2010-7-12 07:44:00 | 显示全部楼层 |阅读模式
1 任何类都可以用结构和global函数表示。比如 Monster_Update(Monster).
2 任何结构都可以用多个global变量表示。比如 Monster_HP, Monster_MP.
3 现在我们只剩下global函数和global变量。
  而global整体可以看作是一个类!
  于是,可以用一个函数 global(var_or_func_id) 表示该类。
  比如 global(ID_Monster_HP), global(ID_Monster_Update).

当然,以上只是对事物的看法的一种而已。

3

主题

263

帖子

267

积分

中级会员

Rank: 3Rank: 3

积分
267
发表于 2010-7-22 22:41:00 | 显示全部楼层

Re:万物皆为一个函数

路过,帮顶,说了等于没说.呵呵,有点牵强.你说的是面向过程的方法而不是面向对象.

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
 楼主| 发表于 2010-8-2 00:54:00 | 显示全部楼层

Re:万物皆为一个函数

谁告诉你不是面向对象了?

3

主题

263

帖子

267

积分

中级会员

Rank: 3Rank: 3

积分
267
发表于 2010-8-2 19:16:00 | 显示全部楼层

Re:万物皆为一个函数

呵呵,我调用global函数,传进去一个参数,那你是不是要if else或者switch这样的逻辑来判断参数.典型的OP而不是OO.
OO是通过扩展类来扩展逻辑,OP是通过加if和switch代码来做.呵呵,这句话的意思可能有点片面,但是意思你已经清楚了.不要咬文嚼字.建议看Effective C++.

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
 楼主| 发表于 2010-8-4 00:20:00 | 显示全部楼层

Re:万物皆为一个函数

1 OO可以用非OO方式实现。C也可以编写OO程序。

2 严格来说C++不是OO语言,而是介于OO和OP之间。C++没有属性 方法 事件,只有成员变量和成员函数

3

主题

263

帖子

267

积分

中级会员

Rank: 3Rank: 3

积分
267
发表于 2010-8-4 20:45:00 | 显示全部楼层

Re:万物皆为一个函数

呵呵,OO是一种设计思想好吧,"非OO方式实现OO",你的意思我明白,用C确实可以实现OO,但是既然实现了,那就是OO了.只不过C++相对于C来说更OO化.

你也说到了方法和属性,那么如果对象只有一个方法global,而且通过传递参数,内部来switch,这可不是OO的思想.
而且OO很重要的一点是多态,用于抽象设计.那可不是一个函数可以搞定的.

87

主题

790

帖子

806

积分

高级会员

Rank: 4

积分
806
QQ
发表于 2010-8-4 21:35:00 | 显示全部楼层

Re: Re:万物皆为一个函数

crazii: Re:万物皆为一个函数

呵呵,我调用global函数,传进去一个参数,那你是不是要if else或者switch这样的逻辑来判断参数.典型的OP而不是...

有点看不懂,归纳下各种情况下OO和OP做法的区别吧

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
 楼主| 发表于 2010-8-5 00:09:00 | 显示全部楼层

Re:万物皆为一个函数

还有一个问题是,OO这玩意本身,也不是逻辑层的。而是一种实现。
所以实际上对OO的实现,就是对实现的实现了。

为什么说OO本身(属性 方法 事件)也是一种实现呢?我把前几天的帖子粘贴过来:

简单地说,面向对象总是说一个对象拥有某个方法(就是动词)。
这是荒谬的,比如凭什么是"表格"拥有"添加",而不是"数据"或"操作人员"拥有“添加”?
再说"对象的属性",这似乎是有意义的,因为比如"(人的)性格"显然是为“人”所拥有,
这没错,但是因为"人"的属性(它是一种看法)是任意多的,凭什么只把某几种属性放进"人"类?
---- 这些都是代码的编写方面的问题,可以说面向对象所面向的是一个个代码块,而不是一个个对象。

此外,抽象类本身也是编码实现,例如vb6就无需抽象类(后期绑定)

3

主题

263

帖子

267

积分

中级会员

Rank: 3Rank: 3

积分
267
发表于 2010-8-5 04:03:00 | 显示全部楼层

Re: Re: Re:万物皆为一个函数

陈?: Re: Re:万物皆为一个函数


有点看不懂,归纳下各种情况下OO和OP做法的区别吧

假如要一些类型的物品,OP的思想可能是这样:
既然是过程化的,那就来吧:
struct Item { type ;};
struct ItemA : Item {};
struct ItemB : Item {}
void UseItem(Item* pItem)
switch(Item->type)
{
case A: {ItemA* pItemA = (ItemA*)pItem; ...(DO SOMETHING) }
case B:...
}

OO的思想是这样,
class Item {public: virtual Use() = 0; };
class ItemA :Item {...}
class ItemB : Item {...}
Item* pItem = ...;
pItem->Use();
多态很重要,没有多态就不算OO了..

哎,我在这里装逼,自己都不好意思,过意不去了.呵呵,这些东西自己做了就会领悟了.

3

主题

263

帖子

267

积分

中级会员

Rank: 3Rank: 3

积分
267
发表于 2010-8-5 04:19:00 | 显示全部楼层

Re: Re:万物皆为一个函数

instemast: Re:万物皆为一个函数

还有一个问题是,OO这玩意本身,也不是逻辑层的。而是一种实现。
所以实际上对OO的实现,就是对实现的实现...

抽象是为了代码复用和灵活,通常都说VB是基于对象的,而不是面向对象的.因为他不支持多态,没有抽象.前期抽象和后期绑定差别很大. 还举刚才那个例子,如果我用OO,Item的Use方法,有新的Item类进来,这段代码照样可以用,**理论上不需要任何修改**.它不关心具体的Item类是什么,只关心去调用他的Use方法,至于这个类的Use方法干了什么,我不关心,我这里的逻辑就是使用物品.但是如果是OP或者是后期绑定,那么,我不仅要添加数据结构,而且这段代码在每添加一个物品类型之后,就要多一个case 分支,把使用物品的过程放在这里,慢慢堆,**代码是有更大维护开销的**...instemast兄,这个肯定是有区别的吧.


你说人的那个例子,呵呵,晕了,抽象设计离不开具体需求分析,人到底需要哪些属性,是跟需求有关的好吧.不能泛谈.根据特定范围内的需求再说属性.不然没意义了.比如通讯录中的人,它的属性当然是一些联系信息了.游戏中的人,属性就是HPMP等等了.你脱离了具体的分析范围,就没有办法谈属性的选择了,好比你说得万物皆为一个函数.个人感觉是没啥意思的.OO没错是一种实现,而这种实现体现了OO的思想.

阿弥陀佛,我实在是太堕落了,在这里装逼也不老老实实研究技术,罪过罪过. [em6]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-8 02:45

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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