
软件设计与开发
PowerScript函数和事件的重载
覆盖及扩展研究
邢小平
(通信指挥学院仿真中心湖北武汉430010)
数事热术海a用
摘要:与其它面向对象编程环境一样,PowerBuilder编程环境具有继承性、多态性和封装性等典型特征.英然在PowerBuilder应用开发中,结构化设计仍然是主流,但如果我们掌提面向对象的技术细节,并能熟继运用的话,那么对于程序设计的可重用性,可维护性,软件开发效率以及所开发的款件的质量部会有较大幅度的提高.本文主要研究了PowerScript编程中函数与事件的重载和度益及扩展等相关问题
关键调PowerBuilder面向对象品数事件
中图分类号:TP319
文献标识码:A
1、PowerBuilder面向对象的特性
文章编号:1007-9416(2011)10-0132-0
4、函数与事件的比较
维承性,多态性和射装性编程语言面向对象的主要特性, PowerBuilder具备这三个特性。
(1)维承性,在PowerBuilder编程环境中,窗口,菜单和用户对象这二者可以维承,其他对象则都不能继承。当对象被继承时,了类可以重载或覆盖函数,事件可以履盖或扩展。继承后的子类具有与父类完全相同的属性和代码,且我们不能在编程时删除其继承特性。
(2)多态性。对丁PowerScript中的多态两数。我们只需指山对象及函数的名称即可。对丁--些不清楚的对象类,可以用Typeof函数来判断该对象的类,进而得到该类的实例名。
(3)时装性。对装的是为了实现对祖先对象的数据保护,对装后的对象提供一个对外操作接口,使其他对象通过调用函数及参数赋值等方式来访间在PowerScript环境中有Public,ProtectPrivatc 三种访间类型,其缺省的实例变量和对象函数都是public类型。
2、函数的重载和覆盖
函数重载是指在程序中定义多个函数,这些函数具有相同的名称和不同的参数列表。PowerScript允许同-+个对象(或该对象f 类)中定义同名函数。在程序运行过程中,PowerBuilder将会调用函数的参数列表和函数原形进行比较,并由此决定调用哪个函数。
函数覆盖是指在子类对象中定义与祖先对象相同名称,相回参数列表的函数。通常,在程序中被调用的往往是了类对象中的函数。如果需要调用祖先对象中的函数,则需要使用城操作符(即";:"符号)进行声明。
创建重载函数(或覆盖函数)与创建其它的两数操作过程基本相同。如采我们创建的雨数和现有函数的名字相同而参数列表不同,则创建的函数为重载函数;如果我们创建的函数与现有函数的名字及参数列表都相问,则创建的函数为覆盖函数。
需要注意的是,如案被处理数据的数据类型不尚,即使是两个相同的操作,也可以创建两个重载函数。使用具有不同数据类型的
重载两数,可以忽略函数的输人数据类型。 3、事件的扩展和覆盖
事件的扩展是指在执行祖先对象中的程序后,再执行了在对象中的程序。事件的覆盖是指忽略祖先对象中的程序,仪执行了类对象中的程序。与重载函数不同的是,我们不能通过定义名称相同,参数不间的方式实现事件的重载,在PowerScrip环境中,对象中的事件名称必须是难-的。
事件扩展和覆盖的操作步暴:
步骤,打开子类对象设计窗,选择维派事件编程;步骤二,单击菜单中的Design菜单项,打开下拉菜单;
步骤二,若选择"ExtendAnccstor Script"项,则在当前窗口中写入的代码将扩展该对象的祖先事件,该项为缺省设置,若选择"Override AncestorScript"项,则写人的代码将覆盖祖先事件。
132
(1)相同点。函数和事件都可有参数和返回值:对象上定义的函数和事件都可以被动态或静态调用,函数和事件都可被Trigger或 Pose。
(2)不同点。事件必与某:对象相关,而函数可以是全局的,也可以是对象定义的:部分;在程序运行时,如果调用-个术定义的函数,程序将会报错,面调用·个未定义的事件则不会发生错误;函数可以重载,而事件不能重载,当定义需数时,可指定数的访间级测,但定义事件时却不能指定访间级别,当我们为子类对象写人事件处理程序时,我们可以实现对事件的扩展和履盖,但如果我们进行函数覆盖时,则必须重新定义该函数,因此,当我们要扩展祖先隔数时,!!
能在子类雨数中先调用祖先函数,再执行需要扩展的语句。 5、承数与事件的调用方法
在调用函数和事件时,可使用关键字STATIC或DYNAMIC来指定函数和事件的调用方式,并决定PowerBuilder在什么时候查找函数和事件。
5.1静态调用
缺省情况下,PowerBuilder将需数和事件指定为静态调用,也就是说,当编译代码时,PowcrBuilder通过查找函数和事件的名称及参数的类型来识别函数和事件。在编译间,必领存在与之匹配的函数和事件。
当程序进行编译时,PowerBuilder只要找到-个匹配的函数或事件就可通过,而并不去判断找到的函数或事件是否有用。例如,假设在祖先对象中存在--个函数,并定义了该祖先对象类型的变量,如果了类对象中存在覆盖函数,那么程序只会执行了类对象中的函数,不会进行靠别选择。
5.2动态调用
如果将函数和事件指定为动态调用方式,那么即使数和事件不存,在编译时程序也不会报错。在应用执行时,PowerBuilder会:1:动搜翁两数和事件,PowerBuilder的这个特性为应用系统的开发带来了··定的灵活性。
值得准意的是,单然动态调用具存定的灵活性,在程序开发中应群免过多地使用动态调用,其缺点如下:
执行缓慢:动念调用有在执行期间被食找并执行,因此动企谢川比静合谢期慢许多,
编译中的疏漏:当使便用动态调用时,PowerBuildcr将会忽略山编译器提供的错误检测。该错误谱付将公程序执行时直接体现山米。
参考文献
[1]康博创作室(译】PowerBuilder6.0程序设计大全(M].北京:机慧工业出版社,1998
[2]晓通数据库研究与发晨中心.PowerScript程序设计指南[D]