14

2024-05

基于Lua的面向组件程序设计研究

| 来源:网友投稿

摘要:在软件工程中,代码重用历来都是备受关注的话题,由此也诞生了各种理论和技术。文章探讨了面向组件程序设计的原则和模式,并分析了Lua在面向组件程序设计中的可行性和优越性。

关键词:Lua;面向组件程序设计;软件工程;二进制兼容;语言独立

中图分类号:TP393文献标识码:A文章编号:1009-2374(2010)09-0003-02

一、基于Lua的面向组件程序设计概述

在软件工程中,代码重用历来都是备受关注的话题,由此也诞生了各种理论和技术,比如面向对象思想。各种程序设计语言一般也会以源代码或二进制库的形式将常用的功能封装起来,以便在开发中重用。但是这些重用技术一般仅局限于源代码级别。一旦软件完成编译并部署后,针对某个具体应用而开发的程序却很难重用于其它项目。

例如,两个程序都需要读取用户输入,然后分析输入数据,输出处理结果。如果其中一个程序将所有模块都编译到单一的二进制执行实体里,无论这个程序如何在源代码级别上划分模块,另外一个程序也无法重用这个程序。即使这个程序提供了源代码,也很难保证代码可以毫不修改,甚至修改少量部分后能用于另外一个程序。因为就算两个程序使用了相同的程序设计语言,对于类似的功能其内部实现也可能千差万别。

因此人们希望程序能够在二进制级别上实现重用,如同硬件制造领域的标准组件一般。随着软件理论的发展,人们逐渐对什么是面向组件程序设计达成了共识,其中最重要的原则包括接口和实现分离、二进制兼容、语言独立。遵循这些原则,当今广泛用于企业级开发的Java平台和.NET平台都为面向组件程序设计提供了有力的支持。相对于这些重量级平台,本文将探讨如何使用Lua在小规模项目中实现面向组件程序设计。

Lua是一种用ANSI C实现轻量级脚本语言,其语法简单易懂,执行效率高,包括脚本解析器和标准库的一个发行版的大小甚至不到200kB。并且,Lua被设计为能够轻易地整合到用C或者其它语言编写的程序中。更重要的是,Lua具有很好的扩展性,除了用Lua自身,也可以用C或者其它语言为Lua编写组件。以上这些特性使得Lua成为一种良好的胶水语言,极其适合应用在面向组件的程序设计中。我们可以将一个程序中不易改变的基础模块编写为Lua组件,然后用Lua来将各个组件粘接在一起,如同搭积木一般使程序得以成形。程序中易于变动的代码,比如功能配置和业务逻辑,也可以用Lua编写。在整个软件开发周期中如果需求经常发生变动,经过良好设计的组件也能够尽可能地保持不变,而只用修改用Lua编写的胶水代码。并且,良好设计的组件也能够重用在其它项目中。

二、面向组件程序设计的原则在基于Lua的程序设计中的体现

以下分别讨论面向组件程序设计的原则是如何体现在基于Lua的程序设计的。

(一)接口和实现分离

对于组件来说,最重要的是接口的定义和实现。组件的使用者只是关心如何使用接口而不用考虑内部的实现细节。有相同接口的组件也可以互相替换。例如一个USB接口,使用者只用将USB设备插入即可使用,并且其它USB设备也可以使用这个接口。这一点与面向对象程序设计中封装的概念相同,但是组件的封装是定义在二进制级别上的。

Lua的基本数据类型中有一种叫做Table,其实质是一种相关数组,除了可以用整数作为索引外,还可以用字符串等其它数据类型作为索引。这一点类似于面向对象思想中对象和成员的概念。当在Lua中导入一个组件时,导入的组件会在Lua的执行环境里创建一个Table类型的变量,并将其成员初始化为该组件中的函数接口。使用者只用关心Table类型变量的名称和其函数接口的定义,而不用在乎该组件是如何编写的。事实上,Lua主要使用C语言编写组件,称之为C组件。C组件可以静态链接到Lua的脚本解析器里,也可以编译成动态链接库,在Lua脚本执行时动态加载。并且Lua本身也是一套完整的程序设计语言,因此也可以用Lua自身编写组件,称之为脚本组件。

(二)二进制兼容

二进制兼容是可重用组件的基础,其意味着二进制码形式的组件可以和使用组件的程序在同样的平台下运行,并且意味着接口相同的组件可以在二进制级别互相替换。与JAVA平台和.NET平台通过虚拟机和公用运行时技术保证了所有组件的二进制兼容性相对,对于Lua来说,在同一个项目中,所有C组件都必须针对目标平台编译。动态链接库形式的C组件因为其动态链接库的性质,只要保持接口不变,自然在目标平台下是二进制兼容的。与虚拟机技术相比,虽然同样的Lua库必须经过重新编译后才能在不同的平台上使用,但是对于小规模项目来说,一般都是针对单一的平台开发,并不用过多地考虑跨平台的二进制兼容性。并且,用ANSI C实现的Lua可以在几乎所有的平台上编译并使用。如果一个项目中用到的组件同样使用ANSI C编写,那么就很容易把这个项目移植到其它平台上。

(三)语言独立

对于可能在不同项目中重用的组件,强制使用同一种程序设计语言既没有必要也不太现实。一旦能够相互交互,不同语言编写的组件便可以在更广泛的范围内得到重用。在JAVA平台和.NET平台下,一致的虚拟机和公用运行时保证了语言的独立性。而对于机器码形式的动态链接库来说,只要遵循统一的二进制接口定义,亦可以用多种语言编写。因此对于Lua的C组件来说,除了使用C语言外,任何支持动态链接库技术的语言都能够用于编写Lua组件。并且对于不直接支持这种技术的语言,还可以用C语言将其封装起来,使之成为Lua组件。

另外,Lua被设计为易于整合到其它语言中的特性,也使得Lua可以直接和其它语言交互,使用针对其它语言的组件。例如,Lua的衍生项目LuaInterface提供了Lua和.NET平台的交互能力。既可以将.NET框架库作为Lua组件,在Lua脚本中直接使用,又可以将Lua解析器作为.NET库,整合到各种.NET程序中。

三、使用Lua进行面向组件开发的好处

综上,Lua在面向组件的程序开发中能发挥很好的作用。在实际项目中使用何种方式编写程序虽然不能一概而论,但是使用Lua来进行面向组件的开发能带来额外的好处。

(一)基于Lua的组件式开发方式本身就可以看作是一种软件开发框架

开发框架已经在生产环境中被证明能有效地解决大量的重复问题。将程序划分为不同的二进制组件分别编写,有助于开发人员从与面向对象思想不同的角度将复杂的问题更彻底地细化,降低软件开发的难度。组件式的开发方式从某种程度上也能强制开发人员将各个组件的耦合度降至最低,从而提高组件的可复用度。随着时间的累积,开发人员会编写出越来越多的组件,开发框架也会随之而成长。当再次遇到类似的问题时,这些积累起来的低耦合度组件便可以发挥很好的作用,于是成长起来的开发框架解决类似问题的能力亦能够得到进一步的提高。

软件测试已经在生产环境中被证明能有效地提高软件质量。因此现代软件工程理论认为,软件测试应该伴随软件开发的整个周期,而不只是作为末期的一个收尾阶段。与大多数传统的项目都需要单独的测试框架相对,Lua本身就可以作为一个测试框架。各个组件良好定义的接口,使得对其分别测试变得容易。并且Lua本身脚本语言的特性,也使得不需要额外的脚本测试工具。因此可以在软件开发的早期使用Lua编写好整个系统的测试框架,然后再分别编写各个组件来使得测试框架能够通过测试,以实现基于测试驱动的开发。另外,以Lua为核心的系统因为其简单的语言特性,也有助于快速搭建系统原形,实现迭代式开发,使得项目中存在的潜在问题能够尽早被发现。

人们总是在高层次上对低层次进行抽象,通过隐藏其复杂的细节来简化问题。操作系统是对底层硬件的一层抽象,各种程序设计语言及其框架又是对各种API的一种封装。在此之上,良好设计的组件又能够进一步简化各种问题的解决。Lua,作为一种轻量的适用于面向组件程序设计的脚本语言,有理由相信其必定会在面向组件程序设计的领域中占据一席之地。

参考文献

[1]Rober to Ierusalimschy.Programming in Lua, Second Edition[M].Lua.org,2006.

[2]Clemens Szyperski.Component Software:Beyond Object-Oriented Programming (2nd Edition)[M].Addison-Wesley Professional,2002.

作者简介:邓楠乔(1983-),四川达州人,电子科技大学空天科学技术研究院硕士研究生,研究方向:控制理论与控制工程。

推荐访问:程序设计 组件 面向 研究 Lua

最新推荐New Ranking

1软件实施方案(实用8篇)(完整文档)

方案是从目的、要求、方式、方法、进度等都部署具体、周密,并有很强可操作性的计划。我们应该重视方...

22023年应聘自我介绍(优秀18篇)(精选文档)

范文为教学中作为模范的文章,也常常用来指写作的模板。常常用于文秘写作的参考,也可以作为演讲材料...

3房屋租赁合同电子版免费(汇总19篇)【优秀范文】

在人民愈发重视法律的社会中,越来越多事情需要用到合同,它也是实现专业化合作的纽带。那么合同书的...

42023年度上课看课外书检讨书(模板20篇)(精选文档)

范文为教学中作为模范的文章,也常常用来指写作的模板。常常用于文秘写作的参考,也可以作为演讲材料...

52023年最新春节晚会结束语十字(11篇)(完整)

无论是身处学校还是步入社会,大家都尝试过写作吧,借助写作也可以提高我们的语言组织能力。范文书写...

6护理干事个人总结(实用8篇)

工作学习中一定要善始善终,只有总结才标志工作阶段性完成或者彻底的终止。通过总结对工作学习进行回...

7坚持方面名人名言(通用16篇)【优秀范文】

人的记忆力会随着岁月的流逝而衰退,写作可以弥补记忆的不足,将曾经的人生经历和感悟记录下来,也便...

8代发工资协议签好后多久发放(优秀8篇)

人的记忆力会随着岁月的流逝而衰退,写作可以弥补记忆的不足,将曾经的人生经历和感悟记录下来,也便...

9美术论文鉴赏(大全19篇)【精选推荐】

在日常学习、工作或生活中,大家总少不了接触作文或者范文吧,通过文章可以把我们那些零零散散的思想...

10领导辞职报告(汇总20篇)(范文推荐)

在经济发展迅速的今天,报告不再是罕见的东西,报告中提到的所有信息应该是准确无误的。报告对于我们...