一种基于Lua脚本语言的软件开发辅助系统的制作方法

文档序号:13471945阅读:299来源:国知局
本发明涉及计算机
技术领域
:,特别涉及一种基于lua脚本语言的软件开发辅助系统。
背景技术
::当前市场上手游通常需发布在安卓和ios平台。而由于平台的限制,以及手游系统越来越复杂的特性,能否支持热更成为了开发者考虑的重要因素。lua作为一种脚本语言,其代码可以热更新,并且简单易用,从而被开发者作为主要的开发语言。然而,lua语言存在以下不足:(1)不是面向对象语言目前的程序开发普遍采用面向对象设计,而非面向对象语言对习惯于面向对象设计的程序员来说会非常困难。(2)缺乏严格的类型检查由于lua是动态类型语言,没有严格的类型检查,因此容易造成开发错误的产生。(3)调试困难由于lua缺乏严格类型检查、编写随意、大小写敏感、不同开发者开发的程序会风格迥异可读性较差。而lua对于程序开发中的错误提示信息不足,造成调试极为不便。因此,为了解决上述问题,需要能够实现面向对象设计,对类型进行动态检查,以及方便调试的一种基于lua脚本语言的软件开发辅助系统。技术实现要素:本发明的目的在于提供一种基于lua脚本语言的软件开发辅助系统,所述系统包括:功能实现模块,用于在lua脚本语言中实现面向对象的功能,包括对类的定义、基本数据类型的定义、类之间的继承,以及变量的定义和控制,其中定义类时,将类分为变量和方法;变量类型检查模块,用于对变量类型的检查,包括类前置声明,类变量、类方法、方法参数、基本类型以及自定义类型的检查;访问控制模块,用于全局变量以及局部变量的访问控制;动态开关模块,用于在软件开发过程和发布过程中控制开启不同的支持功能。优选地,所述访问控制模块包括非访问控制符,通过在typemeta表中添加define表,为所述变量和方法提供控制符,来控制所述变量和方法。优选地,所述非访问控制符包括field、const、method、virtual、override、static、final控制符。优选地,通过virtual控制符和override控制符实现多态功能。优选地,所述功能实现模块提供了定义所述类的语法。优选地,所述功能实现模块通过extend关键字表明一个类继承自另一个类。优选地,所述功能实现模块通过模拟类的无参数构造函数,进行实例化对象。优选地,所述类前置声明执行如下过程:若类未进行定义和声明,则返回一个空类,作为参数类型使用;若类已经定义,则返回已定义的类。优选地,类变量的检查包括类变量定义时的检查和类变量赋值时的检查,其中类定义变量时,检查该变量的类型是否是所述基本数据类型,并检查该变量的初值类型与该变量的类型是否匹配;类变量赋值时,检查该变量是否为const控制符的变量,如果是,则该变量不赋值,并检查所赋值的类型与变量的类型是否匹配。优选地,类方法的检查包括类方法定义的检查和类方法调用的检查,其中类方法定义时,为该方法生成一个存储方法参数和返回值类型的列表;类方法调用时,将传入值和参数类型与类方法定义时生成的列表进行比较,判断是否匹配,同时判断所述返回值类型及个数与类方法定义时生成的列表进行比较,判断是否匹配。本发明提供一种基于lua脚本语言的软件开发辅助系统,能够实现面向对象设计,对类型进行动态检查,方便软件开发过程的调试。增加代码的健壮性和可读性,提高软件开发的效率。应当理解,前述大体的描述和后续详尽的描述均为示例性说明和解释,并不应当用作对本发明所要求保护内容的限制。附图说明参考随附的附图,本发明更多的目的、功能和优点将通过本发明实施方式的如下描述得以阐明,其中:图1示意性示出了本发明软件开发辅助系统定义类的流程框图;图2示出了本发明软件开发辅助系统定义的类的关系示意图;图3示出了本发明软件开发辅助系统类组成的示意图;图4示出了本发明类前置声明的流程图;图5示出了本发明类变量的检查流程框图;图6示出了本发明类方法的检查流程框图。具体实施方式通过参考示范性实施例,本发明的目的和功能以及用于实现这些目的和功能的方法将得以阐明。然而,本发明并不受限于以下所公开的示范性实施例;可以通过不同形式来对其加以实现。说明书的实质仅仅是帮助相关领域技术人员综合理解本发明的具体细节。在下文中,将参考附图描述本发明的实施例,相关技术术语应当是本领域技术人员所熟知的。在附图中,相同的附图标记代表相同或类似的部件,或者相同或类似的步骤,除非另有说明。下面结合具体的实施例对本发明的内容进行说明,本发明提供的一种基于lua脚本语言的软件开发辅助系统包括:功能实现模块,用于在lua脚本语言中实现面向对象的功能,包括对类(class)的定义、定义类的语法、基本数据类型的定义、类之间的继承(extend),以及变量的定义和控制,其中定义类时,将类分为变量(field)和方法(method)。变量类型检查模块,用于对变量类型的检查,包括类前置声明,方法参数、类变量、类方法、基本类型以及自定义类型的检查。访问控制模块,用于全局变量以及局部变量的访问控制。动态开关模块,用于在软件开发过程和发布过程中控制开启不同的支持功能。首先对本发明功能实现模块进行详细说明,如图1所示本发明软件开发辅助系统定义类的流程框图,类的定义包括如下的步骤:s101、声明类名,利用语法localclassname=lplus.extend(basetype,“classname”)或者localclassname=lplus.class(“classname”)声明类名。在声明类名时,需要判断基类(basetype)是否已被定义,如果未定义则会给出错误信息,同时需要判断类名(classname)是否已被定义,如果未定义,会给出错误信息。s102、声明变量,利用语法def.field(“type”).filedname=initvalue声明变量。在声明变量时,如果检查开关打开,则进行类变量检查;如果检查开关未打开,则声明方法。具体地,在下文中详细说明类变量检查的过程。s103、声明方法,利用语法def.method(……).methodname=function(self,……)声明方法。在声明方法时,如果检查开关打开,则进行类方法检查;如果检查开关未打开,则进入步骤s104中提交。具体地,在下文中详细说明类方法检查的过程。s104、提交,利用语法classname.commit()提交定义的类,在提交定义的类时,类的变量、方法赋值给实例化的对象,并对变量进行赋值操作。本发明提供的一种基于lua脚本语言的软件开发辅助系统利用语法localobj=classname()进行实例化对象,之后可以利用obj.fieldname调用变量,obj:methodname(arg1,……argn)调用方法,但并不限于此。如图2所示本发明软件开发辅助系统定义的类的关系示意图,本发明提供的基于lua脚本语言的软件开发辅助系统实现了直观的面向对象功能:类(class)(基类101和子类102)之间的继承(extend),子类102和子接口103之间的实现(implement),子接口103与接口104之间的继承(extend)。根据本发明,实施例中使用interface关键字提供接口功能。接口不能被实例化成对象。一个类可以继承一个父类,实现多个接口。本发明定义接口的语法为:localinterfacename=lplus.interface(“interfacename”)。继承(extend)接口的语法为:localinterfacename=lplus.extendinterface(basetype,“interfacename”)。实现(implement)接口的语法为:localclassname=lplus.class(“classname”).implement(interfacetype1).implement(interfacetype2)。类如果声明实现一个接口,需要实现该接口内的所有方法。如图3所示本发明软件开发辅助系统类组成的示意图,在定义类时,将类分为变量(field)和方法(method),并用不同的表为类存储变量(field)和方法(method),本发明访问控制模块包括非访问控制符,通过在typemeta表中添加define表,为变量和方法提供控制符,来控制变量和方法。实施例中,基类101和子类102分别为变量和方法提供控制符,来控制变量和方法。本发明将typemeta表作为元表(metatable),当需要调用类的变量和方法时,调用元表(metatable)的__index、__newindex方法查找变量和方法。本发明访问控制模块,用于全局变量以及局部变量的访问控制。全局变量访问控制利用全局表_g定义和使用全局变量,当直接使用未声明的变量时,给出相应的警告提示。由于lua脚本语言规定全局变量不需要声明,给一个变量赋值后即创建了这个全局变量,本发明当直接使用未声明的变量时,给出相应的警告提示防止了全局变量不需要声明造成的不安全性。局部变量访问控制遵循lua脚本语言局部变量访问规则,当拼错局部变量名称时,会变成全局变量访问,并给出相应提示。根据本发明,实施例中非访问控制符包括field、const、method、virtual、override、static、final控制符。field、const控制变量,method、virtual、override、static、final控制方法。根据本发明,实施例中对基本数据类型进行定义和分类,基本数据类型包括nil、boolean、number、string、userdata、function、thread、table、dynamic。其中本发明使用该基本数据类型,对变量和参数进行类型检测,并提供相应错误信息。根据本发明,实施例中功能实现模块提供了定义类的语法localclassname=lplus.class(“classname”)。通过extend关键字表明一个类继承自另一个类,其语法为:localclassname=lplus.extend(basetype,“classname”),需要说明的是,本发明子类会继承父类所有的变量和非final控制符的方法,具体为,通过将父类内的所有变量和方法完全拷贝到子类对应的表中,来实现子类拥有父类的变量和方法。子类只能继承一个父类。根据本发明,实施例中通过virtual控制符和override控制符实现多态功能。当定义子类时,首先将父类的所有成员变量和方法拷贝给子类。子类用override控制符的方法进行定义时,将method控制符的同名方法重新赋值,即用子类方法覆盖。根据本发明,实施例中override控制符要求子类定义的override控制符的同名方法和父类完全相同,包括方法名、传入参数类型、返回值类型、参数个数、返回值个数。根据本发明,实施例中利用语法def.operator(“type”).fieldname=initvalue来定义变量,利用控制符field、const控制变量,变量类型不能为nil数据类型。本发明利用如下语法定义方法:def.method(“type1”,……,”typem”,“=>”,“typer1”,……typern”).methodname=function(self,“arg1”,……,“argm”)returnvalue1,value2,….valuenend利用控制符method、virtual、override、static、final控制方法,变量类型不能为nil基本数据类型。上述定义方法的语法中,methodname为定义的方法名,一个类内不能有多个同名方法(包括从父类继承的方法),“type1”,……,”typem”为方法的参数的类型,function(self,“arg-1”,……,“argn”)为方法的形参列表,其中self为自身,“=>”为其后为方法的返回值信息,“typer1”,…”typern”为方法的返回值类型。根据本发明,实施例中功能实现模块通过模拟类的无参数构造函数,进行实例化对象。本发明重写__call元方法,将类的field控制符的变量实例化为对象的变量,并将类的method控制符的方法作为调用元表(metatable)的__index。本发明通过上述重写__call元方法模拟类的无参数构造函数,实现了实例化出的每一个对象拥有自己的变量,修改一个对象的变量不会影响到其他对象变量的功能。同时对象也拥有类的所有方法。本发明提供的一种基于lua脚本语言的软件开发辅助系统具有动态开关模块,用于在软件开发过程和发布过程中控制开启不同的支持功能。下面对本发明变量类型检查模块进行详细说明,lua脚本语言会检查两个模块是否相互引用,如果相互引用会作出提示:looporpreviouserrorloadingmodule。为了解决这个问题,本发明提供了类型前置声明。如图4所示本发明类前置声明的流程图,类前置声明执行如下过程:s201、类前置声明,定义前置声明类typename。s202、判断步骤s201中定义的前置声明类typename是否已经被定义,如果是,则进入步骤s205;如果否,则进入步骤s203。s203、判断步骤s201中定义的前置声明类typename是否已经被声明,如果是,则进入步骤s205;如果否,则进入步骤s204。s204、创建空类,创建一个名称为typename的空类,并将这个空类返回,作为参数类型使用。s205、返回已定义的类。如图5所示本发明类变量的检查流程框图,类变量的检查包括类变量定义时的检查和类变量赋值时的检查,包括:s301、定义变量。s302、检查变量类型是否有效,即检查该变量的类型是否是基本数据类型,如果有效,则进入步骤s303;如果无效,则提示错误。s303、检查该变量的初值类型与该变量的类是否匹配,如果是,则存储变量,如果否,则提示错误。s304、变量赋值,检查该变量是否为const控制符的变量,如果是,则该变量不赋值,并且进入步骤s305;如果否,提示错误。s305、检查所赋值的类型与变量的类型是否匹配,如果是,则存储变量;如果否,则提示错误。如图6所示本发明类方法的检查流程框图,类方法的检查包括类方法定义的检查和类方法调用的检查,包括:s401、定义方法。s402、检查方法参数和返回值的类型。s403、判断步骤s402中方法参数和返回值的类型是否有效,如果是,则进入步骤s404;如果否,则提示错误。s404、为该方法生成一个存储方法参数和返回值类型的列表。s405、判断定义的方法是否有父类,如果是,则进入步骤s406,如果否,则进入步骤s407存储方法。s406、如果定义的该方法是override控制符的方法,则将该方法和父类同名方法进行比较,判断是否匹配,如果是,则进入步骤s407存储方法,如果否,则提示相应错误。s407、存储方法。s408、调用方法。s409、将传入值和参数类型与步骤s404中类方法定义时生成的列表进行比较,判断是否匹配,如果是,则进入步骤s410;如果否,则提示错误。s410、判断返回值类型及个数与步骤s404中类方法定义时生成的列表进行比较,判断是否匹配,如果是,则结束调用方法,如果否,则提示错误。本发明提供的一种基于lua脚本语言的软件开发辅助系统,实现了直观的面向对象功能,和主流面向对象语言java、c#等类似,极大的方便了程序员的使用。本发明提供的类型检查,可以实现更加严格的变量类型检查,包括类型的前置声明,函数的参数、返回值及成员变量的类型检查。本发明提供的访问控制,添加了对全局表及自定义类型内局部变量的访问控制,防止重要的数据被预期外的操作和代码修改。本发明提供的动态开关,可以将项目分为开发版本和发布版本,方便在开发过程和发布过程中的动态控制,供开启不同的支持功能。本发明提供的一种基于lua脚本语言的软件开发辅助系统,能够实现面向对象设计,对类型进行动态检查,方便软件开发过程的调试。增加代码的健壮性和可读性,提高软件开发的效率。结合这里披露的本发明的说明和实践,本发明的其他实施例对于本领域技术人员都是易于想到和理解的。说明和实施例仅被认为是示例性的,本发明的真正范围和主旨均由权利要求所限定。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1