现在的位置: 首页 > 综合 > 正文

LUA脚本组件系统(三)

2018年05月27日 ⁄ 综合 ⁄ 共 1870字 ⁄ 字号 评论关闭

LUA脚本组件系统

----让LUA成为C++的子集

2.1 C++与面向对象杂谈

         上一节,我大概罗列出一些静态语言的缺陷及动态语言的优点,但这些观点仅仅只是一些教条式的陈述,并没有给出一些具有逻辑的推理和证明.至少我认为还有三点没有讲清楚:首先是c++静态语言的缺陷及这些缺陷是怎样影响游戏开发的;其次脚本语言是如何解决C++的缺陷的;最后,为什么要使用lua语言而不是其它脚本语言.

         对于第一个问题,我想先从基本的概念上进行论述,首先来看看面向对象中的两个基本的概念,”对象”和”类”.

什么是对象呢?

         在哲学层次上来说:

对象(英语:Object)指可感知或可想像到的任何事物,既包括客观存在并可观察到的事物(如树木、房屋,抽象的如物价、自由),也包括想像的事物(如神话人物)。(---http://zh.wikipedia.org/wiki/%E5%AE%A2%E9%AB%94)

在计算机科学层次上来说

对象(object),台湾译作物件,是面向对象(Object Oriented) 中的术语,既表示客观世界问题空间(Namespace)中的某个具体的事物,又表示软件系统解空间中的基本元素。

在软件系统中,对象具有唯一的标识符,对象包括属性(Properties)和方法(Methods),属性就是需要记忆的信息,方法就是对象能够提供的服务。在面向对象(Object Oriented) 的软件中,对象(Object)是某一个类(Class)的实例(Instance)。

(---http://zh.wikipedia.org/wiki/%E5%AF%B9%E8%B1%A1_(%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%A7%91%E5%AD%A6))

         什么是类呢?

         类(class),是一种面向对象计算机编程语言的构造,是创建对象的蓝图,描述了所创建的对象共同的属性和方法。

(http://zh.wikipedia.org/wiki/%E7%B1%BB_(%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%A7%91%E5%AD%A6))

         从哲学层次上来讲,类也是一个抽象的概念,因此类也是对象的一种!但在C++中,类不是一种对象,这也决定了C++这种语言在设计层次上就有一些缺陷.

         在游戏开发或者其它的软件开发过程中,我们首先对需求进行分析,提取出所需要的对象,然后再根据这些对象的属性和方法抽象出一个类,再用这个类去创建所需的对象,最后使这些对象相互协作,形成最终产品.用一个简单的图形来描述该流程如下:

        

这样的流程程有以下几个缺陷:

1.      由于抽象的层次会因为对对象的了解和认知程度不同而不同.因此抽象出来的类也会因此而不同.

2.      需求的改变变导致对象的改变,因此描述对象的蓝图—类也会改变

3.      每一个对象都必需有一个类来描述,也就是说产生一个新的对象必须要有一个新的对应的类来作为它的蓝本(虽然这种情况可以通过组合来避免)

在游戏开发中,需求是不断变更的,由于以上的缺陷使得这种开发方式不能很好的响应需求的变更.

那么如何改进上述这个流程来更好的响应开发需求呢?最理想的流程如下:

        

         但这是不现实的,至少到目前为上没什么系统可以支持这样的开发流程,当需求提出后,产品就直接生成了。

我们再来看看这样的流程

       

         也就是说首先根据需求提取对象,然后用这样的对象协作组成最终的产品.嗯,看起来不错,我们减少了由对象抽象出类和类定义对象的的这两步,从而降低了需求响应的周期.但这样的流程可以实现吗?

         我们知道,对象由属性和方法组成,也就说如果语言能支持动态的为对象增加属性和方法,上面流程就可以实现.但同时我们也知道,静态的编译语言是不支持这种操作方式的.因此我们需要一种动态语言,这种语言可以动态的为对象增加对象和方法.除些之外我们还希望这种语言可以完成对象之间的协作从而形成最终的产品.脚本语言刚好满足上述的两个特点,能弥补c++语言的缺陷.

         最后回答一个问题,为什么用lua而不是其它脚本语言?首先最主要的原因是笔者的偏好,因为笔者对lua的语言的了解比其它脚本语言更深入;其次,lua语言是一门小巧,灵活的语言,在运行效率上比其它脚本语言高;最后,lua已经被很多游戏开发者使用,有更多的资料和实例可以参考和学习.

抱歉!评论已关闭.