您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > PB教程第十一章对象
11.1简介对象是面向对象程序设计的核心概念。一个对象可以拥有若干属性,以及一系列的对这些属性进行操作的方法。一个对象可以通过若干个接口同其它的对象进行相互的作用,共同完成一项工作。当对象被定义好之后,它就拥有了活力,就能够完成一定的功能。我们给出一个对象的定义之后,就可以根据需要多次使用,而不需要做任何额外的工作,这就大大提高了脚本的重用性和易维护性。POWERBUILDER提供了用户对象这个特性,很好的支持了对象化程序设计。下面我们就具体介绍如何在POWERBUILDER中定义和使用用户对象。POWERBUILDER中有两种用户对象,一种是可视的用户对象,一种是类用户对象。下面我们先介绍可视用户对象。11.2可视化用户对象所谓可视用户对象就是可重用的具有某种行为的一个或一组控件。下面举一个例子,定义一个用户对象。首先单击POWERBAR上面的用户对象画板按钮USEROBJ,屏幕上弹出用户对象选择对话框。如图11-1。图11-1单击NEW按钮,新建一个用户对象。系统要求我们选择用户对象的类型。如图11-2。图11-2下面的VISUAL组框表示建立可视类型的用户对象,CUSTOM图标表示定制类型,定制的可视化用户对象是具有多个控件的对象,它们作为一个整体来发挥作用。STANDARD图标表示标准类型的可视化用户对象,它是通过继承一个标准类型的POWERBUILDER控件来定义的。我们可以通过修改其定义使之适应程序设计的要求。EXTERNAL图标表示外部可视用户对象,它的定义来自基于WINDOWS操作系统的POWERBUILDER系统之外的对象,比方说,如果您准备了一个WINDOWS动态链接库,那么就可以使用它在POWERBUILDER中建立一个外部的可视化用户对象。上面的CLASS组框表示要建立类用户对象,其中也包括定制和标准两种,它们的含义与刚才介绍的可视化用户对象的对应部分大致相同,在后面的内容当中,我们将加以详细地介绍。单击VISUAL组框中的STANDARD按钮,建立一个标准类型的用户对象。接下来选择继承哪一种标准控件。这个列表框当中列出了POWERBUILDER中支持的所有标准控件,选择PICTURE图片控件加以继承。然后单击OK按钮。如图11-3。图11-3下面就用户对象画板的工作区。我们看到上面有一个图片控件。在它上面单击鼠标右键,弹出菜单,选择SCRIPT命令,开始编写脚本。编写用户对象的脚本要处理的一个重要问题就是解决用户对象和拥有它的窗口之间的通讯问题。一般的情况之下,我们有两种选择:使用函数,或者使用用户事件。所谓用户事件就是在POWERBUILDER标准事件以及WINDOWS标准事件之外,由用户自己定义的事件。下面我们示范如何定义和使用用户事件。在主菜单中选择DECLARE的USEREVENT命令,定义一个用户事件。如图11-4。图11-4在EVENTNAME一栏当中可以敲入事件的名称,在EVENTID一栏当中可以敲入事件的ID号,不过如果您定义的用户事件与WINDOWS标准消息无关的话,可以忽略这个命令ID号。单击OK按钮结束定义。如图11-5。EVENTNAME为ALTERPIC,EVENTID为PBM_CUSTOM01。图11-5在脚本画板的工作区当中,单击SELECTEVENT事件选择列表框,我们看到ALTERPIC这个用户定义的事件已经出现在列表当中了。下面的工作当中,我们将会用到一个全局变量。如何定义一个全局变量呢?选择DECLARE菜单当中的DECLAREGLOBALVARIABLES命令,在POWERBUILDER弹出的全局变量定义对话框当中输入变量的定义integerpicnum,单击OK按钮,就完成了定义。如图11-6。图11-6在这个事件的脚本当中我们还将使用一个结构。什么是结构呢?结构就是相关变量的集合,结构的相关变量被称为结构属性。结构可以分为全局级和对象级两种,这里我们定义一个对象级的结构,用来保存几个字符串。定义结构的方法非常的简单。选择DECLARE中的USEROBJECTSTRUCTURES命令,系统弹出结构选择对话框,单击NEW按钮,新建一个结构。在VARIABLENAME一栏当中输入变量的名字,选择变量的类型。输入需要的变量之后,关闭结构定义画板。如图11-7。图11-7系统将会提示我们保存这个结构,选择“是”按钮,给结构取一个名字strucpicturename,定义结构的工作就完成了。如图11-8。图11-8如何在程序中使用这个结构呢?一个结构就是一个新的数据类型,在使用之前必须实例化。这句脚本的意思就是生成一个结构的实例。(这一步可以略过,因为后面也没有用上。)strucPictureNamename我们可以使用点操作符给结构的变量赋值。name.pic1=1.bmpname.pic2=2.bmpname.pic3=3.bmpname.pic4=4.bmpname.pic5=5.bmpname.pic6=6.bmpname.pic7=7.bmp这段脚本的意思是根据全局变量的值从结构变量当中取出合适的值来改变图片控件的属性。这一段代码的意思是创建一个名为name的以strucPictureName为模板的结构体。以下脚本是写在alterpic事件里面的:CHOOSECASEpicnumcase1this.picturename=1.bmppicnum=2case2this.picturename=2.bmppicnum=3case3this.picturename=3.bmppicnum=4case4this.picturename=4.bmppicnum=5case5this.picturename=5.bmppicnum=6case6this.picturename=6.bmppicnum=7case7this.picturename=7.bmppicnum=1ENDCHOOSE单击POWERBAR上面的RETURN按钮,关闭工作区。关闭用户对象定义工作区。单击“是”按钮确认保存这个用户对象,为这个对象取名字animatepic。单击OK按钮。如图11-9。图11-9接下来,打开一个窗口,单击控件布置按钮,弹出控件列表,单击USEROBJECT按钮,系统弹出用户对象选择对话框,在列表中选择刚才定义的控件,选择然后在窗口上单击鼠标左键,布置这个控件。如图11-10。图11-10在窗口上面单击鼠标右键,弹出菜单,选择SCRIPT命令。在事件选择列表当中选择OPEN事件,在其中加入一段代码。Timer(0.5)它的意思是在窗口打开的时候,设置该窗口的定时器触发时间间隔为半秒钟。设置然后选择窗口的TIMER定时器触发事件。加入这样的代码。p_1.TriggerEvent(alterpic)它的意思是当定时器计时已满事件触发的时候,程序触发我们刚才定义的用户事件。这样就完成了窗口和用户对象的接口定义。关闭脚本画板工作区。关闭窗口画板工作区。从上面的例子当中,可以看出使用用户对象的便利之处。11.3类用户对象一般不推荐使用这种方法建立函数,最好在POWERBAR1里面找fun按钮,建立全局的函数。为了使读者有一个比较全面的知识结构,笔者在这里简单提一下,有兴趣的读者可以阅读学习,类用户对象对于多个返回值的函数有优势,可是总的来说使用起来不是很方便,如果想见效快的朋友,可以直接跳到11.4进行阅读学习全局函数的使用方法。除了可视的用户对象之外,POWERBUILDER还提供了一种不可视的用户对象:类用户对象。它也具有非常广泛的应用领域。比方说,在制作一个商用数据库软件的时候,经常会使用某些商业规则对数据进行重复地计算和处理。如果我们定义一个用户对象,由它来管理这套数据处理的办法,那就会使程序的设计工作方便很多。下面我们通过一个例子来说明如何建立和使用类用户对象。首先单击POWERBAR上面的用户对象画板按钮USEROBJECT。系统弹出对象选择对话框。单击NEW按钮,新建一个对象。接着,系统询问新建用户对象的类型。关于这两个组框的含义,在介绍可视化用户对象的时候已经进行了大致的说明。CLASS组框当中的STANDARD图标表示标准类型的类用户对象。POWERBUILDER本身带有一些不可视的用户对象,比方说前面曾经提到过的系统事务处理对象,通过继承这些系统对象生成的类用户对象就是标准类型的类用户对象。CUSTOM图标表示定制的类用户对象,顾名思义就是用户自己定义的类对象。我们选中这个图标,建立一个定制类用户对象。单击OK按钮,进入用户对象画板的工作区。如图11-11。图11-11这个矩形框就代表着用户对象,由于类用户对象是不可见的,所以我们不能在它上面布置任何的可视控件。接下来要做的工作是为这个对象封装属性和函数。在对象上面单击鼠标右键,弹出菜单。如图11-12。图11-12GLOBALVARIABLES,SHAREDVARIABLES,INSTANCEVARIABLES这三个命令都可以用来为对象定义变量属性。GLOBALVARIABLE是全局变量,它可以从应用程序的任何地方直接访问。INSTANCEVARIABLE是实例变量,什么是实例呢?我们在这里定义的是类用户对象,它相当于一个模板,进行程序的设计的时候,我们可以在需要的时候根据这个模板生成具体的对象,这些具体的对象才是我们真正使用的东西,它们被称为实例。实例变量就是为一个对象产生的所有实例定义的,但是它的值对于每一个实例而言又是不同的。SHAREDVARIABLE是共享变量,和实例变量一样,它也是与一个对象的所有实例都有关系,不同的是共享变量在每一个实例变量当中都具有相同的值。我们选择INSTANCEVARIABLE定义一个实例变量。屏幕上弹出声明实例变量的对话框。如图11-13。图11-13在里面敲入以下需要定义的变量。decimal{1}value1decimal{1}value2decimal{1}value3decimal{1}value4decimal{1}value5decimal{1}thevalue单击OK按钮,关闭对话框。再次在对象上面单击鼠标右键,选择USEROBJECTFUNCTIONS命令,为对象封装函数。如图11-14。图11-14屏幕上显示函数选择对话框,单击NEW按钮新建一个函数。这里介绍两种方法,第一种如图11-15。图11-15在NAME一栏当中,输入函数的名字calplan1。单击ACCESS列表框,如图11-16。图11-16Access缺省值为“public”。访问属性Access有三个选择:public:在整个程序中都可访问。表示可以从应用程序的任何地方访问这个函数。private:只能在当前对象的程序中使用,不能在该对象的后代的程序中使用。protected:只能在当前对象的程序以及该对象的后代的程序中使用。对象函数的命名规则一般与对象有关,如应用对象ApplicationObject的函数一般以“af_”作前缀,窗口对象Window的函数一般以“wf_”作前缀,菜单对象menu的函数一般以“mf_”作前缀,用户自定义对象的函数一般以“uf_”作前缀。这些规则清楚地表明了函数所在对象的类型,便于程序的维护。选择PRIVATE类型。这样就可以在使用的时候直接改变存储的数值,不需要再用赋值语句。在RETURN列表框中可以选择当前函数运行的返回值类型。我们接受缺省的INTEGER整数类型。下面的ARGUMENT组框是用来定义当前函数的参数表的。我们要定义的函数只接受一个参数,输入参数的名称thevalue,在参数类型选择列表框当中选择需要的参数类型。PASSBY列表框是用来定义参数传递方法的。单击这个列表框,如图11-17。图11-17VALUE方式的意思是传参的时候将这个参数复制一份,再利用这个值进行计算,函数操纵的是参数的复制品,这样函数被调用结束的时候将不会影响参数的值,这个参数实际上就相当于C语言中的形参;REFERENCE引用方法的意思就是函数进行数据
本文标题:PB教程第十一章对象
链接地址:https://www.777doc.com/doc-2885389 .html