LPC基础讨论-数据类型--object
2008/12/25 16:14:37

首先给object一个定义:
在 LPC 里面,任何能够通过编译的一个文件,就是一种object

上面的这句话有两个要点,一:能通过编译就是;二:是一种,而不是一个

和class一样,它支持->运算符,不同的是,class用->来访问元素,object
用->来访问函数

物件在 LPC 里面非常重要,因为 LPC 本身就是一种基于创造物件的编程
(我这里没有说OOP是因为OOP这个感念太过于含糊,“面向对象”,
“基于对象”这两个说法都没有清晰的定义和界线)

涉及到物件的还包括物件见的环境关系,以及一大堆支持物件的efun
这应该是最有讨论空间的一个变量了。
对于 object 我实在是讲不出什么有条例的东西来,所以,只有在这里引用我在 RW 的board 上看到的一遍关于 object 的转贴,非常赞,我现在贴过来

                  LPC TextBook
              作者: Tseng, Ling-hua
              第一版: November 24 2001
第一章: LPC 的基本概念
1.1 LP 系统纯物件导向的设计概念
LPMud 的世界为一纯物件的世界,构成此世界的最基本元素就是物件。一个物件的产生,
代表该物件被载入了记忆体中,但是并不一定经过编译。系统给予每个物件独一无二的识
别名称□物件名称 (object name),在一个世界里每个物件只有一个物件名称,永远不会
和其他的物件重复。物件导向的世界里,同样类型的物件拥有相同的属性(property),改
变属性的值代表变更了物件的特徵及外观,譬如人类类型的物件,有著相同的姓名属性,
改变姓名属性的值可以代表不同的人,同样的改变性别属性可以区分男女,以职业属性来
区分每个人所会做的工作;我们使用物件方法(method)来存取及变更属性,物件方法也能
依照属性值的不同,而使物件能够做不同的工作。
1.2 物件的编译(compile)、载入(load)与复制(clone)
一个物件原则上具有一个实际存在的 .c 档案,当我们希望载入或复制此物件,而此物件
之原始物件 (original object)并不存在于记忆体中时,此档案会经过编译并被载入。一
个物件可以透过以下几种几个外部函式 (efun, external function)载入:
    1. load_object(filename) - 只载入原始物件
    2. find_object(filename, 1) - 结果同上
    3. new(filename, ...) - 载入原始物件(如果未被载入),并从原始物件复制一
                    份出来,产生一复制物件
    4. clone_object(filename, ...) - 结果同上
    5. call_other(filename, func, ...) 或 filename->func() -
      与 1, 2 相同, 但载入或寻找到原始物件后,会立即呼叫该物件的方法函式
      func, 使用 call_other(filename, "???") 或是在 ??? 处填入任意不存
      在的方法函式名称,则只会载入物件,亦即与 1, 2 结果相同,值得注意的
      是,filename 必须是一字串型态才可进行载入物件的动作
    注:标出 ... 的部分目前不必理会,只需要知道该处可送入一群参数,也可以
        完全不需要送入参数,如 new("/obj/test"), new("/obj/test", 10) 、
        new("/obj/test", 10, "abcd", 1234, "test")
在上面我们提到了原始物件(original object)和复制物件(cloned object),这两个物件
的差别在于原始物件含有经过编译后的执行码(opcode),占据较大的记忆体空间,而每个
物件身上的属性均占有不同的记忆体空间,也就是互不相干。要注意的是无论原始物件在
被复制时其中的属性值为何,其值并不会被复制,而是依程式撰写的方式决定其初始值(
initial value) 。 当一个变数被摧毁时,如果其方法函式正在运作,并不会立即停止程
式的执行,但是其物件属性已被完全消灭,如果摧毁后的执行过程存取到物件属性,则会
发生执行期错误(runtime error)。
原始物件被摧毁之

下一页
返回列表
返回首页
©2025 MUD游戏网_文字mud 电脑版
Powered by iwms