前往Shuct.Net首页

Shudepb PB反编译专家长时间以来,为业内同类软件事实上的唯一选择.细节,彰显专业.态度,决定品质.

关于PowerBuilder的搜索

PowerBuilder面向对象的程序设计 PowerBuilder面向对象的程序设计   应用与开发 在PowerBuilder的应用开发中,运用面向对象技术不是必须的,但是对于一个大型复杂应用系统的开发,如果采用了面向对象技术,则开发效率会大大提高。 用PowerBuilder开发的好处是,即使您不懂得什么是面向对象技术,您也可能会下意识地用到面向对象技术的一些特性,但是如果您对这一技术有了充分的了解,那对您所设计程序的可重用性,可维护性和其他各方面的质量都会有大幅度提高。 PowerBuilder的对象 PowerBuilder对象有三个部分元素:属性、函数和事件。 (1)属性:也就是数据。包括系统属性和用户定义属性两类,描述该对象的各种特性。如在窗口对象中的系统属性包括标题、高度、宽度等,用户定义的属性可以是实例变量或共享变量,对这种属性的访问同系统属性相同,只是在封装性上有所不同。 (2)事件:PowerBuilder中的事件与Windows的事件存在着映射关系。当用户的操作或系统本身产生了Windows的标准事件,就转化成PowerBuilder中的事件。例如命令按钮有一个叫 Clicked事件,当用户按按钮时触发,操作系统首先检测到鼠标被点击,并把Clicked这一消息转给该按钮,PowerBuilder运行时的工作引擎翻译了这一事件,并执行适当的PowerScript语句。PowerBuilder中大部分的事件都是可以映射成由用户激发的Windows事件。另一类事件是用户定义事件,这种事件是用户声明并可以在任何时刻由用户触发的,Power-Builder中保留了75个用户事件可由程序员使用。 (3)函数:用户通过函数来使对象完成某些操作。Pow-erSoft公司建议用户通过调用对象事件和函数来修改对象而不要直接修改对象属性,以满足对象封装的要求,例如采用Window. hide()而不要用Window.visi-ble=false来使窗口不可见。 PowerBuilder面向对象的特性 提到一门语言的面向对象特性,它应当具有继承性、多态性和封装性,如缺少其中的一个则只能称其为基于对象的系统,而不是面向对象的系统,而PowerBuilder则很好地具备了全部三个特性。 ·继承: PowerBuilder中,窗口、菜单和用户对象是可以继承的,而其他对象则都不能。当您继承了一个对象,那您得到的子类将具有父类的属性、实例变量、共享变量、控件、用户自定义事件、对象级函数、事件和代码(script)。也就是说当您继承了一个类,您几乎得到了这个类的全部,不过有一点值得注意,您不能在子类中删除任何一个继承到的特性。 在继承了祖先类后,您可以在子类中扩展或覆盖祖先的元素。例如代码,在PowerBuilde r中缺省的是采用扩展方式,先执行继承到的祖先代码,后执行子类的扩展代码。您也可以选择菜单Compiler|Override Ancestor Script选项,只执行子类的代码,并可在代码中的任意位置调动祖先代码如CALL w_l∷open。 重载函数是面向对象程序设计的重要特性,即同一函数名却有着不同的参数和返回值。在运行时,系统自动寻找执行参数相匹配的那个函数,例如我们常用的MessageBox()这个函数就有12个不同参数的重载函数。遗憾的是,对Power-Builder我们不能在同一个继承对象中定义2个不同参数的重载函数,只能在后继的类中定义重载函数,这使我们对重载函数的定义带来了很大的不便,这不能不说是PowerBuilder的缺陷。(不过在即将发布的PowerBuilder5.0 中,正是支持了函数重载这一特性。) 对于对象的继承,PowerBuilder中所有对象都有其共同的基类PowerObject,从这一个基类下面分成继承类Graph-icObject和NonVisualObject等。它们的继承关系和扩展函数及属性如下表:   ·多态性: 在PowerBuilder中有大量的多态函数如print()、TriggerEvent()等,在运行过程中,您只需要指出对象和函数名即可。在有些函数中,即使不知道对象类,也可以用Class Name()函数得到对象类,或得到实例名,将对象名作为函数参数调用该函数。 ·封装性: 封装的目的是为了实现数据隐藏和数据保护,封装的目标是为对象提供一个对外操作的接口,使其他对象通过函数来访问,而不允许直接操纵对象的属性。在PowerBuilder中有三种访问类型Public、Protect、Private,这三种访问控制类型可以用在对象的变量和函数上,缺省的实例变量和对象函数都是public类型的。为了保护数据,应尽可能多地使用private和p rotect类型,前者只允许对象内部的元素来访问,后者可以接受对象内部和继承类的元素访问。 PowerBuilder面向对象程序设计的过程 事实上用户在运用Power-Builder进行程序设计的一开始,就已经开始进行对象类的设计 :例如在建立窗口时可以用窗口画笔(painter)建立一个新窗口,命名为w_emp。建立的窗口就是从PowerBuilder的窗口对象继承下来的,所以窗口会自动具备一些属性,例如X和Y的坐标、高度、宽度、窗口类型、标题等。当用窗口画笔建立窗口时,您给这些属性赋了值,你还可以增加窗口的函数和事件。当窗口被保存时,你就建立了一个新的窗口继承类,称为:w_emp。输出对象的句法显示的部分程序如下: global type w_emp from Window int X=200 int Y=233 int Width=2405 int Height=1285 boolean TitleBar=true string Title="Employee Mainte-nance" string MenuName="m_emp" long BackColor=12632256 boolean ControlMenu=true boolean MinBox=true boolean MaxBox=true boolean Resizable=true . . . end type global w_emp w_emp 请注意系统在这里做了什么:首先定义了w_emp窗口类是从window类继承而来,接着定义这一对象类的各属性值,在句法的最后一行声明了一个全局变量,变量的类型(对象类)是w_e mp,变量名(对象实例)也是w_emp。也就是说在您建立了w_emp这一窗口对象后,系统就具有了 w_emp这一对象类和w_emp这一全局变量。这个变量是引用变量,也就是在有些语言称之为指针的变量类型。引用变量并不真正含有窗口实例的属性,而是包含了一个位置或是内存中的一个地址,在那儿你可以找到实例的实际属性和程序。但在应用的开始时这一指针为空,因为在内存中并没有一个这样的窗口实例。当系统执行了Open(w_emp)后,系统在内存中复制了一份w_emp对象类的拷贝或实例,w_emp这一参照变量指向了这一地址。由于窗口对象的visibl e等属性都是Public类型,所以继承类也都具有了这些属性。 文章选自《网易》 版权信息: 本主页版权所有:北京师范大学现代教育技术研究所;管理员信箱:ysq@elec.bnu.edu.cn;电话:010-62206922。要获取最佳浏览效果,请使用800*600分辨率模式。