找回密码
 点一下
查看: 2232|回复: 12

[复制链接]
发表于 2011-2-17 10:28:49 | 显示全部楼层 |阅读模式
忽然想到一个问题,通常把个体的机枪兵看作机枪兵类的对象,然而机枪兵本身是个变量,那么机枪兵类究竟因该看作由机枪兵个体构成的结构,还是由机枪兵状态构成的结构?换句话说“类”当中的成员究竟是一个个变量,还是变量的值?
发表于 2011-2-17 11:00:36 | 显示全部楼层
你纠结了

类->对象<---->变量

对象是根据类构建的,所以类的构建跟个体和个体的状态无关,而变量只是你给这个个体起的名字而已
回复

使用道具 举报

 楼主| 发表于 2011-2-17 11:25:42 | 显示全部楼层
引用第1楼马甲君于2011-02-17 11:00发表的  :
你纠结了

类->对象<---->变量

对象是根据类构建的,所以类的构建跟个体和个体的状态无关,而变量只是你给这个个体起的名字而已
变量和变量名是两回事,变量名是字符串,变量本体则是另一种存在。
定义机枪兵的时候应该用到了类似的代码:
var
  Tom:MarineClass;
因此机枪兵Tom是数据类型为机枪兵类的变量……这里实例确实就是变量本身。
回复

使用道具 举报

发表于 2011-2-17 12:42:29 | 显示全部楼层
我想你的思维还是有问题,或者说我根本不晓得你表达的是什么

一个对象创建出来,你如何去分辨他,最简单的,起个名字,所以变量就产生了,至于这个名字给谁?这不一定对吧~

如果非要纠缠变量和变量名的话,那么你口中所谓的变量其实是指他所代表的个体吧
回复

使用道具 举报

发表于 2011-2-17 14:37:01 | 显示全部楼层
如果把数据编辑器里机枪兵模板视为一个类,那么实际创建的机枪兵应该称之为类的实例。

而一般编程语言中的类的成员分为属性、事件、方法三种。SC2数据编辑器里能自定义的东西大部分是属性。所以数据编辑器里的类描述的是这类对象所具有的属性。这和变量无关。
回复

使用道具 举报

 楼主| 发表于 2011-2-17 17:32:15 | 显示全部楼层
呃,还是不太明白……
ETA:数据类型
数据类型在数据结构中的定义是一个值的集合以及定义在这个值集上的一组操作。 变量是用来存储值的所在处;它们有名字和数据类型。变量的数据类型决定了如何将代表这些值的位存储到计算机的内存中。在声明变量时也可指定它的数据类型。所有变量都具有数据类型,以决定能够存储哪种数据。

具体机枪兵是数据类型为机枪兵类的变量,他的值是他的状态,按照数据类型的定义机枪兵类应该是具体机枪兵的值域了……
回复

使用道具 举报

发表于 2011-2-17 17:59:52 | 显示全部楼层
楼主你在纠结些什么啊???
回复

使用道具 举报

发表于 2011-2-17 18:12:21 | 显示全部楼层
显然是因为心智不健全
回复

使用道具 举报

 楼主| 发表于 2011-2-17 19:48:01 | 显示全部楼层
才不是哩……

因为有的地方把类描述成由一些对象构成的对象,机枪兵类似乎应该由机枪兵个体构成;然而如果把机枪兵类看作数据类型,而机枪兵个体看作变量,那么类就应该由机枪兵个体的值构成。这两种类的定义显然是不等价的,我的问题就在这里了。
回复

使用道具 举报

 楼主| 发表于 2011-2-19 10:25:55 | 显示全部楼层
终于想通了!其实两种说法都对,关键在于“表示”。

就本体而言,机枪兵个体的确属于机枪兵类,然而作为物自体的机枪兵是不可直接把握的,只能通过和他有关的各种关系(属性可看作一元关系)来间接地认识他,这些关系就构成了机枪兵的“态”,机枪兵个体就用态变量来表示,机枪兵的方法和事件由映射表示,而机枪兵的类则由由所有可能态的集合以及这些映射所构成的系统来表示(系统可能是开放的,因此映射未必局限在态的集合中)。
回复

使用道具 举报

发表于 2011-2-19 10:59:27 | 显示全部楼层
你懂了可是我完全没懂。。。
回复

使用道具 举报

发表于 2011-5-10 20:10:33 | 显示全部楼层
不是很明白楼主所说,但我认为,如果你认定“机枪兵”作为一个类,那么某个机枪兵“机枪兵A”就是“机枪兵”的实例。“机枪兵A”创建时沿用“机枪兵”定义的属性,但是创建以后,它的某些属性自然是可变的,这个取决与“机枪兵”这个类的定义。但是你不能认为“机枪兵A”变了,“机枪兵”也就跟以前不一样了吧?
由一个简单的比较:
类:机枪兵 -> 按钮
实例:机枪兵A -> 按钮A
属性:机枪兵A的生命值 -> 按钮A的标题
方法:删除机枪兵A -> 卸载按钮A
事件:机枪兵A死亡 -> 按钮A被点击。
回复

使用道具 举报

 楼主| 发表于 2011-5-14 10:38:01 | 显示全部楼层
引用第11楼yxxiaobin于2011-05-10 20:10发表的  :
不是很明白楼主所说,但我认为,如果你认定“机枪兵”作为一个类,那么某个机枪兵“机枪兵A”就是“机枪兵”的实例。“机枪兵A”创建时沿用“机枪兵”定义的属性,但是创建以后,它的某些属性自然是可变的,这个取决与“机枪兵”这个类的定义。但是你不能认为“机枪兵A”变了,“机枪兵”也就跟以前不一样了吧?
由一个简单的比较:
类:机枪兵 -> 按钮
实例:机枪兵A -> 按钮A
属性:机枪兵A的生命值 -> 按钮A的标题
.......
不过关键的问题在于如何理解“类”与“实例”之间的关系,如果“类”指的是由NBG系统定义的对象,而“实例”是“类”的元素,那么由外延公理和一阶逻辑可以得出两个类相等当且仅当它们含有相同的元素,这样问题就来了,如果“机枪兵A”变了,例如生命减少了,那变化后和变化前就不相等了(由一阶逻辑若两个对象相等那它们的所有属性必定相等,现在变化前后HP不相等,因此变化前后的“机枪兵A”是两个不同对象),这样就会导致“机枪兵”这个类中的某个元素变为了另一个不同的元素,由于类中的元素发生了变化,整个类也将发生变化……

虽然用类比的方法理解起来比较容易,但是要用公理化的方法严格地叙述起来就不那么容易了……

Reference:
http://zh.wikipedia.org/wiki/%E5 ... 6%E5%90%88%E8%AE%BA
http://zh.wikipedia.org/wiki/%E5 ... 9%E7%B3%BB%E7%BB%9F
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-9-28 08:24 , Processed in 0.044391 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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