原来的结构中可能出现的问题.ppt

上传人:牧羊曲112 文档编号:5942207 上传时间:2023-09-06 格式:PPT 页数:28 大小:326.11KB
返回 下载 相关 举报
原来的结构中可能出现的问题.ppt_第1页
第1页 / 共28页
原来的结构中可能出现的问题.ppt_第2页
第2页 / 共28页
原来的结构中可能出现的问题.ppt_第3页
第3页 / 共28页
原来的结构中可能出现的问题.ppt_第4页
第4页 / 共28页
原来的结构中可能出现的问题.ppt_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《原来的结构中可能出现的问题.ppt》由会员分享,可在线阅读,更多相关《原来的结构中可能出现的问题.ppt(28页珍藏版)》请在三一办公上搜索。

1、第八章 过程-process,原来的结构中可能出现的问题:(1)程序结构不够清晰(2)代码重复太多所以引入模块化,结构化程序设计.vb6.0提供的过程(1)子过程sub(2)函数过程function(3)属性过程property子过程又分为通用过程和事件过程两类.本章只讨论函数过程和子过程.过程保存在模块中.VB的模块包括窗体模块(.frm文件),标准模块(.bas文件)和类模块(.cls文件).我们只讨论前两种.VB应用程序可包含多个模块.添加新模块的方法是,在设计状态下,选择“工程”菜单中的“添加窗体”或“添加模块”项,然后在弹出的相应对话框中单击“打开”按钮.,8.1 函数过程-func

2、tion process,函数分类为:内部函数,自定义函数.VB包含大量的内部函数,比如前面所学的sin,int,spc等等.VB还允许用户使用function语句编写自己的函数过程.函数过程是一个独立的过程,可读取参数,执行一系列语句并改变参数的值,并且可将一个值返回到调用的过程.一.函数过程的定义(说明):方法1:在VB6.0中利用“工具”菜单下的“添加过程”命令定义.其步骤如下:(1)为想要编写函数和过程的窗体/标准模块打开代码窗口.打开方式有a)“查看代码”按钮b)双击控件或窗体,或从“视图”菜单中选择“代码窗口”或按F7键.(2)选择“工具”菜单下的“添加过程”命令,显示“添加过程”

3、对话框.,(3)在“名称”框中输入过程名(4)在“类型”组中选取“函数”定义函数过程.(5)在“范围”组中选取“公有的”定义一个公共级的全局过程;选取“私有的”定义一个标准模块级或窗体级的局部过程.方法2:利用代码窗口直接定义在窗体/标准模块的代码窗口中,把插入点放在所有现有过程之外,键入函数过程名就可以定义函数过程.利用代码窗口定义的函数过程需要使用funtion语句.Function 语句的作用:用来声明函数过程的名称、参数以及构成其主体的代码。Function语句的语法格式:,8.1 函数过程-function process,public|private|friendstaticfun

4、ction 函数过程名(参数列表)as 类型 局部变量或常数定义 语句序列 函数名=表达式 exit function 语句序列 函数名=表达式end function格式说明:(1)public|private|friend 在后面在讲解(2)过程名:不要与VB中的关键字windows API函数以及同一级别的变量重名.,8.1 函数过程-function process,(3)类型:函数过程的返回值的数据类型.(4)函数名=表达式-要从函数返回一个值,只需将该值赋给函数过程名。在过程的任意位置都可以出现这种赋值.在函数过程内至少对函数过程名赋值一次。如果没有对函数过程名赋值,则过程将返回一

5、个缺省值:数值函数返回0,字符串函数返回一个零长度字符串.Variant函数则返回empty.如果在返回对象引用的函数过程中没有将对象引用赋值给函数过程名,则函数返回nothing.在过程的任意位置都可以出现这种赋值。(5)参数列表:代表在调用时要传递过程的参数变量列表。多个变量应用逗号隔开。定义过程时参数列表中的参数也称为参数(形参)或哑元。定义过程时参数没有值。定义过程时,可以无参数。但函数过程即使无参数,过程名后的括号也不能省略。Eg:i2(I=1.x),8.1 函数过程-function process,二.函数过程的调用:函数过程由函数过程名返回一个值,所以函数过程不能作为单独的语句

6、加以调用。通常,被调用的函数过程作为表达式或表达式中的一部分,再配以其他的语法成分构成语句.在赋值语句中调用函数过程的格式为:变量名=函数过程名(参数列表)注意:(1)“参数表”称为实际参数(实参)或实元,它必须与形式参数保持个数相同,位置与类型一一对应.(2)调用时把实参的值传递给形参称为参数传递。其中值传递时实参值不随形参值的变化而变化,而引用传递时实参值随形参值的改变而改变.(3)当参数是数组时,形参与实参在参数声明时应省略其维数,但括号不能省.eg:1+x+(xn/n!)精度为|xn/n!|eps,8.1 函数过程-function process,VB中的子过程分为通用过程和事件过程

7、两类.通用过程告诉应用程序如何完成一项指定的任务.在确定了通用过程后由应用程序来调用.而事件过程通常总是处于空闲状态由用户引发的事件或系统引发的事件调用事件过程来响应.通用过程定义:不同的事件过程有时要响应相同的事件,完成同样的操作。这时,可以将公共语句放入一分离开的过程即通用过程,然后由事件过程来调用它.通用过程可以实现代码的重用,并且容易维护应用程序。一.通用子过程的定义:1.在VB6.0中利用“工具”菜单下的“添加过程”命令定义.,8.2 通用子过程-current sub or function,2.利用代码窗口直接定义格式:private|public|friendstatic su

8、b 过程名(参数序列)局部变量或常量定义 语句序列 exit sub 语句序列end sub说明:语句序列-子过程中所执行的任何语句组。所有的可执行代码都必须属于某个过程。不能在别的子过程,函数过程或属性过程中定义子过程.参数序列-在调用时要传递给子过程的参数的变量列表.多个变量间用逗号隔开.定义过程时参数列表中的参数称为形参,调用过程时参数列表中的参数称为实参.,8.2 通用子过程-current sub or function,运行机制:子过程通过形参与实参的传递得到返回值,而不能通过子过程名返回值.程序举例:给定半径求圆的面积并输出.二.子过程的引用调用格式:子过程名 参数列表或 cal

9、l 子过程名(参数列表)子过程与函数过程的相似之处:(1)它们都是一个可以获得参数,执行一系列获取参数,执行一系列语句,以及改变其参数的值的独立过程.(2)都可以修改传递给它们的任何变量的值.子过程与函数过程的不同点:子过程不能用名字返回一个值,而通过形参与实参的传递得到结果.子过程不能用于表达式.程序举例:eg:1+x+(xn/n!)精度为|xn/n!|eps,8.2 通用子过程-current sub or function,8.3 过程与变量的作用域-process&variants work area,前两节的内容概要:(1)引入模块化,结构化程序设计的原因;模块的概念。(2)过程的分

10、类:子过程sub、函数过程function、属性过程property(3)函数过程的定义,引用方法(4)子过程的定义,引用方法作用域-标识符可被访问的范围。(空间)生存期-变量在整个程序运行过程中的有效生存时间(时间)。与作用域有关的关键字极其含义如下:public:缺省值.表示所有模块的所有其他过程都可访问.Private:表示只有包含其声明的模块的其他过程可以访问该标识符friend:只能在类模块中使用.表示该标识符在整个工程中都是可见的,可以被工程的任何模块中的过程访问.但对于对象实例的控制者是不可见的.friend过程不会在其父类的类型库中出现,且friend过程不能被后期绑定.,一.

11、过程的作用域:过程的作用域分为模块级和全局级.1.模块级(又称文件级)在某文件(模块)内定义的过程。定义时使用private.只能被定义所在文件(模块)中的其他过程调用.2.全局级(又称项目级或工程级)缺省 定义时使用关键字public.可被整个应用程序所有文件(模块)中定义的过程调用,即其作用域为整个应用程序(工程)注意:全局级过程所处的位置不同,定义所在的文件性质不同,则调用时的规则也略有区别.,8.3 过程与变量的作用域-process&variants work area,(1)在某一窗体模块(.frm文件)中定义的全局级过程被在该窗体(文件)外定义的过程调用时,必须在过程名前加上窗体

12、名称.(2)在某一标准模块(.bas文件)中定义的全局级过程,如果与其他标准模块中定义的全局级过程均不同名,这时只要主调过程所在的文件中没有与它同名的过程,就可以直接用过程名调用,无须在过程名前加模块名.(3)在不同文件(模块)中定义的全局级过程也可同名.调用时要在过程名前加上模块名.程序举例:在窗体模块中和标准模块中定义的函数过程(已知半径求圆的面积)在两个窗体中分别引用的方法有什么不同?,8.3 过程与变量的作用域-process&variants work area,二.变量作用域:变量的作用域分为过程级(局部级),模块级(文件级)和全局级(项目级或工程级).1.局部级变量(过程层变量)

13、局部变量-在过程或函数内部使用的变量。在过程内部用dim 或 static 定义.用dim 声明的变量,只当过程调用时才分配存储单元并随着包含它的过程或函数的运行终止而释放。用static 声明的变量,第一次调用该过程或函数时分配存储单元并初始化,再次调用时VB将仍然用原来的分配单元,其值为上次过程或函数被调用完成后的值,直到工程结束时才释放存储单元。(主要用于计数,控制控件可见不可见间的转换,以及用作调试工具),8.3 过程与变量的作用域-process&variants work area,若要使某一过程或函数中的所有局部变量都成为static变量,可把static关键字放在该过程或函数头

14、的前面.eg.static function myfun(num)此过程或函数中无论是用dim 还是用static声明的变量都是static类型的.2.模块级变量是在文件中各过程之外的通用声明部分,用dim 或private 声明的变量,可被本文件内定义的各过程使用,作用域为本文件或过程模块在整个应用程序运行期间分配一个固定存储单元.程序举例:在form的general declare区声明一个变量,在click过程中声明一个同名变量比较它们的异同。,8.3 过程与变量的作用域-process&variants work area,3.全局变量全局变量-任一文件内各过程之外的声明段用publi

15、c语句定义的变量.可被应用程序中任一过程使用,作用域为整个项目或工程.在程序运行期间分配一个固定存储单元.不能在过程中声明公用变量用public 和global(只能在模块中使用)在模块中定义的模块层变量则可以在整个工程中使用。但如用public在窗体的公共声明区声明的变量的引用方法是用“模块名.变量名”的方式程序举例:在模块中用public定义一个变量,在通用声明区用public定义一个同名变量比较它们的不同点说明:(1)在同一模块不同过程中的变量可以同名.(2)同一模块中不同级的变量可以同名.但要注意他们的作用范围的不同。(3)不同模块中定义的全局变量可以同名.但要注意他们的作用范围的不同

16、。(4)过程中引用的变量,总是同名变量中作用范围最小的那一个变量.(5)引用另一模块中的全局变量时,必须在变量名前加模块名.,8.3 过程与变量的作用域-process&variants work area,Def:过程中的代码通常要获取某些关于程序状态的信息才能完成它的工作,信息在调用过程时传递到过程内的变量中.当变量传递到过程时,称变量为参数.格式:optionalbyval|byrefparamarray变量名()as 类型=缺省值,说明:optional表示参数不是必须的.如果使用了该选项,则参数列表中的后续参数都必须是可选的,而且必须都使用optional关键字声明.如果使用了par

17、amarray,则任何参数都不能使用optional声明.Byval该参数按值传递.Byref该参数按地址传递.Paramarray只用于参数列表的最后一个参数,指明最后这个参数是一个variant元素的optional数组(仅返回一个可变类型的值).使用Paramarray关键字可以提供任意数目的参数(但形参必须是以一个可变类型的数组的形式体现,且返回一个值).Paramarray关键字不能与byval,byref,或optional一起使用.,8.4 过程的参数-parameter of process,类型传递给该过程的参数的数据类型,可以是标准数据类型或对象类型和可变类型。如果参数不是

18、optional,则也可以是用户定义类型或对象类型。一.参数的数据类型过程的参数的缺省类型为variant数据类型.同时,也可以声明参数为其他数据类型.例如:byte,boolean,integer,long,currency,single,double,date,string,object二.参数的传递方式过程的参数传递:当子过程或函数过程被调用时,调用语句中的实际参数就与定义语句中的形式参数一一对应起来,并以某种方式把实际参数值传递给形式参数,供过程使用.这个过程就叫过程的参数传递.,8.4 过程的参数-parameter of process,VB中过程的参数传递有两种方式:按值传递,按

19、地址传递1.按值传递:格式:参数前使用关键字byval原理:实际参数的值复制一份给形式参数所代表的临时存储单元,此后形式参数名与实际参数名之间没有任何联系.形式参数的任何变化对实际参数不会产生任何影响。按值传递参数时,传递的只是变量的副本.如果过程改变了这个值,则所变动只影响副本而不会影响变量本身.,8.4 过程的参数-parameter of process,传值的结合过程是:当调用一个过程时,系统将实参的值复制给形参,实参与形参断开了联系.被调用过程中的操作是在形参自己的存储单元中进行,当过程调用结束时,这些形参所占用的存储单元也同时被释放.因此在过程中对形参的任何操作不会影响到实参.2.

20、按地址传递(默认方式)格式:在形式参数前加关键字byref。也可以在形式参数前不加任何关键字传址的结合过程是:当调用一个过程时,它将实参的地址传递给形参.因此在被调过程体中对形参的任何操作都变成了对相应实参的操作,实参的值就会随形参的改变而改变.,8.4 过程的参数-parameter of process,注意:使用传址方式时,对应的实参不能是表达式、常数。程序举例:求圆的面积的函数分别用传值和传址定义后在调用过程后输出变量。Eg2:P141 8-12三.可选参数:在过程的参数列表中列入optional关键字,就可以指定过程的参数为可选项。如果指定了可选参数,则参数列表中此参数后面的其他参数

21、也必是可选的,并且要用optional关键字来声明。Optional参数可以带缺省值,可以是除variant之外的任何类型。在未提供某个可选参数时,实际上是将该参数作为具有empty值的变体来赋值。程序举例:p142,8.4 过程的参数-parameter of process,四.不定数量参数一般来说,过程调用中的参数个数应等于过程说明的参数个数。但如果使用paramarray关键字,过程将接受任意个数的参数。程序举例:p144例8-16五.数组参数过程定义时,形式参数表中的数组用数组名后一对中空的圆括号表示。在过程调用时,实际参数表中的数组可以只用数组名表示,省略圆括号。程序举例:p144

22、例8-17,8.4 过程的参数-parameter of process,六.对象参数VB中可以用对象(窗体和控件)作为过程的参数,其类型是control.把已创建的对象作为实际参数传递给过程,在过程中可以修改该对象的属性,使用该对象的方法.sub change_caption(ctl as control,st as string)ctl.caption=stend subprivate sub command1_click()dim st as string st=inputbox(“请输入caption属性的值”)call change_caption(command1,st)end s

23、ub,8.4 过程的参数-parameter of process,一个控件的事件过程名由控件的名字、下划线和事件名构成。格式:private sub controlname_eventname(arguments)statements end sub说明:可以在开始为控件编写事件过程之前先设置控件的名称属性。也可以对控件附加一个过程之后又更改控件的名字。但要注意将事件的名字与控件的名字对应起来。一.鼠标事件过程1.click事件-在一个对象上单击一个鼠标按钮时发生。也会在一个控件的值改变时发生。,8.5 事件子过程-sub process of event,格式:private sub ob

24、ject_click(index as integer)程序举例:2.dblclick事件-当在一个对象上双击鼠标按钮时,该事件发生。格式:private sub object_dblclick(index as integer)注意:(1)若在click事件中有代码,则dblclick事件不会发生。(2)如果dblclick在系统双击时间限制内没有出现,则对象识别一个click事件。双击时间限制可在控制面板通过设置双击速度改变。程序举例:3.mousedown,mouseup事件,8.5 事件子过程-sub process of event,4.mousemove事件5.dragdrop事件

25、6.dragmode事件7.dragover事件程序举例二.键盘事件过程1.keydown,keyup事件2.keypress事件3.keypreview属性,8.5 事件子过程-sub process of event,用自身的结构来描述自身就称为“递归”。递归使我们能够用有限的语句描述一个无穷的集合。递归子过程/递归函数:在自身定义的内部调用自己的子过程或函数。递归分为直接递归、间接递归两种。递归处理过程一般用栈来实现。栈中存放形参、局部变量、调用结束时的返回地址(pc)。每调用一次自身,把当前参数压栈,直到递归结束条件成立,这个过程叫递推过程。然后不断从栈中弹出当前的参数,直到栈空,这个

26、过程叫回归过程。,8.6 递归-recursion,注意:(1)递归算法设计简单,但消耗的机时和占据的内存空间比非递归算法大.(2)设计一个正确的递归子过程或函数过程必须注意两个要素:其一是具备递归形式;其二是具备递归结束的条件.(3)一般来说,递归函数过程对于求阶乘,级数及指数运算有特殊效果.程序举例:(1)求阶乘,8.6 递归-recursion,本章总结-summary,1)过程的两个重要作用:一是把一个复杂的任务划分为小任务,由过程来实现,可以使任务更容易理解、实现和维护;二是代码重用,各种复杂的任务常常包含的一些完全相同或非常相似的小任务,将它们独立地编成公用的过程,由各个大任务调用,可以避免重复的编程劳动.2)函数的定义,调用方法。3)子过程的定义,调用方法。4)通用子过程和事件子过程的定义及运行机理。5)过程和变量的作用域和生存期。6)参数传递:传值,传址。7)递归:自己调用自己。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号