游戏开发论坛

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

万物皆为一个函数

[复制链接]

12

主题

423

帖子

428

积分

中级会员

Rank: 3Rank: 3

积分
428
QQ
发表于 2010-8-5 10:23:00 | 显示全部楼层

Re:万物皆为一个函数

  面向对象编程是计算机语言的又一次模拟大自然思想
是编程思想的又一大进步
当然不是说提高了什么功能,而是一种思想
引入这种思想,可能是认为这样更适合人类的构思
>比如凭什么是"表格"拥有"添加",而不是"数据"或"操作人员"拥有“添加”?
其实一个表格它已经拥用了"添加"和"数据"
添加是它的一个方法,数据是它的一些值
操作员拥有添加?那是另外一种意思!
操作员是对象的一个外界事物,操作员有没有拥有添加
要了解为这个对象是否给这个操作员开放添加数据方法的权限
一种操作权限的意思,不能和对象混在一起
数据拥用添加?那当然,表格也是一种数据啊,只是表格拥有添加
这样大家都听得懂,就是添加多一个表格,如果表格里出现个
数据添加,那么添加后肯定不是添加多一个表格吧。
而应该是添加表格里的值。
  面向对象编程和面向类编程,也不能认为是相同的。
要认为类是空的,什么也没有,一种形式而已,
对象才是实体,是类的一个实例。
面向对象编程,就是只能对某个类进行实例化,使用某个类
而面向类编程就是制造新类,制造新的形式。
  生活中的类比较复杂,当然类要结合对象才能说得清楚
如,陈某在学校是老师,在家里是家长,
老师和家长都是类,就是说陈某这个对象可能是万能类,
他在学校时,实行老师类,在家里实行家长类,
根据不同的场合变换不同的类,程序上是不可能实现的吧?
至少在程序里我现在都没有发现有这样的对象,
  程序中的类比生活上的类还是好了解的,在程序里一个对象的类
基本是没什么改变的,最多是继承一个类让它同时拥用二个类的形式。

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

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

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

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


假如要一些类型的物品,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了..

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


这个多态明明是底层的东西吧?
从逻辑上说,只需要想象一种"动态重载"就行了。

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

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

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

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


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

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

阿弥陀佛,我实在是太堕落了,在这里装逼也不老老实实研究技术,罪过罪过.


1
谁告诉你vb6不支持多态了?
首先后期绑定(IUnknown::Invoke)代替了多态,而且比多态要逻辑化些,多态太底层了。
而且实际上vb6也支持C++那种多态,就是Implements语句。

2
你那种看待事物的方式是片面的、孤立的、机械的。
比如你说的“通讯录中的人”,那是通讯录中的人,而不是人,所以OO是较低层的,而并非在描述自然。
但面向过程则不。

3
我说万物皆为一个函数,事实上并没有涉及到OO,只是从更底层的代码角度考虑的,只是说任何代码都可以化简为一个global函数。
还有就是,全局函数可以实现方法,方法也可以实现全局函数。前者中全局函数更加底层,后者中全局函数更加高层。不过前后两者中的全局函数在形式上却差不多。呵呵,这个很有意思。


362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

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

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

蜜蜂巢: Re:万物皆为一个函数

  面向对象编程是计算机语言的又一次模拟大自然思想


谁告诉你面向对象编程是模拟大自然思想了?
反而退步了。
从描述大自然变成了描述编码实现。

> 其实一个表格它已经拥用了"添加"和"数据"
> 添加是它的一个方法,数据是它的一些值

1 我说过,"方法"是一个动词,动词怎么可能是属于某个名词呢?
所以方法不是"属于"某对象。即"对象.方法"中的"."不表示所有格。
2 那么 "对象.方法"中的"."是不是表示主格或宾格之类的呢?
这也是不可能的。因为有时候表示主格,有时为宾格,有时为场所格,有时为工具格。
3 那么是不是表示深层语义中的格呢?
这也不可能。比如说 Player.Move(); List.Add(); 这两种情况下,"."分别表示了不同的深层格。

>生活中的类比较复杂,当然类要结合对象才能说得清楚...

这纯属类划分的问题,和对象无关。(如果用OO的话)
不过如果不用OO,那就不必考虑如何划分类了。

3

主题

263

帖子

267

积分

中级会员

Rank: 3Rank: 3

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

Re:万物皆为一个函数

"2
你那种看待事物的方式是片面的、孤立的、机械的。
比如你说的“通讯录中的人”,那是通讯录中的人,而不是人,所以OO是较低层的,而并非在描述自然。
但面向过程则不。"

呵呵,说得貌似很牛逼.但你在实际应用中有没有这么一个"人",而它的属性是不确定的?如果是不确定的,往往是因为需求的不确定性导致的,就算很不确定,还是不会超出一定的范围的,编程是实际应用,而实际应用不会超出一定的范围,不像理论,理论上一个人确实有N种属性,关键是你的应用里面,人的角色是什么.所以我觉得,你说的这么一个绝对的人,脱离了具体的实际环境的人的属性,才是片面的,孤立的吧,因为你想全面化绝对化,但是事实上属性是需要灵活的分析处理的,分析是动态的,不追求全面和绝对,强调全面绝对的N种所有属性是空洞的,无意义的.

多态既然是抽象设计,那应该是底层的,到了上层才会变得具体.这样的抽象往往更灵活(因为我依赖的是抽象的类,跟具体的实现无关),复用性也更高.

"1 我说过,"方法"是一个动词,动词怎么可能是属于某个名词呢?"
我靠,类和方法,属性,这些,跟语法没有关系.
是的,光从语法上来讲,一个动词不可能属于某个名词.
但是"类"和"方法"不仅仅是语法上的东西,"一个类拥有一种方法",不管这个方法是主动的,还是被动的,还是所有的,也就是说,不管从语法上怎么讲,主谓也好,谓宾也好.但是从OO的角度来讲,就是一个类拥有一种方法,这个方法可以是任何动作.就是定义了一个类有一种动作,而不关心动作的具体含义.动作具体含义跟OO本身的思想无关,是由具体的开发来确定的.OO只关心一个类拥有某些属性和某些方法(动作).
如果非要从**语法**上扣,那么可以说,方法体现的是这个类的能力,能不能做,有方法就有这个能力,所以这么说:一个类拥有某些属性(数据)和处理属性的能力,这些能力即是类的方法(动词).而"对象.方法"中的"."表示"使用"该能力.

表格可以"添加",操作员也可以"添加",关键是看你的设计里面,有没有操作员,需不需要操作员,从数据封装性上和具体开发的便利性上综合考量利弊,引入"操作员"这个类是否合适.

87

主题

790

帖子

806

积分

高级会员

Rank: 4

积分
806
QQ
发表于 2010-8-5 22:37:00 | 显示全部楼层

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

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


抽象是为了代码复用和灵活,通常都说VB是基于对象的,而不是面向对象的.因为他不支持多态,没有抽象.前期抽象...

VB的后期绑定也是不需要修改代码的

87

主题

790

帖子

806

积分

高级会员

Rank: 4

积分
806
QQ
发表于 2010-8-5 22:38:00 | 显示全部楼层

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

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


假如要一些类型的物品,OP的思想可能是这样:
既然是过程化的,那就来吧:
struct Item { type ;};
struct...

这是一个,其它区别应该还有

12

主题

423

帖子

428

积分

中级会员

Rank: 3Rank: 3

积分
428
QQ
发表于 2010-8-6 10:03:00 | 显示全部楼层

Re:万物皆为一个函数

呵呵,那也是!
其实instemast说的也对,万物也可皆为一个函数
只是这太大概了,这好比:
整个工程代码全写在一个cpp文件里,万物皆为一个文件
说什么00底层嘛,底层一点就是,万物皆为26个字母加符号
再底层一点嘛,机器码,万物皆为0和1
再底层?我把大家拉上天空,看地球,万物皆为一个球
再拉远一点,我的天,连个球都没有,只一些星星,就是一些点。

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

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

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

蜜蜂巢: Re:万物皆为一个函数

呵呵,那也是!
其实instemast说的也对,万物也可皆为一个函数
只是这太大概了,这好比:
整个工程代码全写在一个cpp文件里,万物皆为一个文件
说什么00底层嘛,底层一点就是,万物皆为26个字母加符号
再底层一点嘛,机器码,万物皆为0和1
再底层?我把大家拉上天空,看地球,万物皆为一个球
再拉远一点,我的天,连个球都没有,只一些星星,就是一些点。


对,就是这个意思。
这也可以等价地表述为,'这就是代数的本性',或者说,'这就是代数的悲哀'

87

主题

790

帖子

806

积分

高级会员

Rank: 4

积分
806
QQ
发表于 2010-8-9 00:18:00 | 显示全部楼层

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

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



谁告诉你面向对象编程是模拟大自然思想了?
反而退步了。
从描述大自然变成了描述编码实现。

>...

的确,面向对象是更底层了,而人的思维比较宏观
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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