易语言教学教材资料.doc
《易语言教学教材资料.doc》由会员分享,可在线阅读,更多相关《易语言教学教材资料.doc(195页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、-_易飞扬面向对象编程易飞扬面向对象编程每年公司周年庆我都会有个小小的礼物给大家的,今年也不例外,教材是 最好的礼物了,本文简单介绍了“易语言.飞扬”系统的面向对象编程方法,易 飞扬还在紧张地开发之中,愿大家与易飞扬一起成长。“易语言.飞扬”官方网站:http:/ “易语言.飞扬”官方论坛: http:/ “易.自.然”编程思想地址: http:/ 学生对象 张三 = 创建 学生对象(“张三“);销毁销毁用户不需要关心对象何时被销毁以及如何销毁。这完全是“垃圾收集器” 的工作。 在对象被销毁之前,其“清理()”方法会被系统调用。用户可在此方法中 做一些处理,但这种需求并不多见。重载重载那么对于
2、一个类中的方法命令,如果重名了,就是“重载” 。这个问题的由 来类似于中国人口那么多,那么叫“王强” 、 “赵军”的不计其数,这个就是重 名了,但人还是不一样的,因为那么多人不可能是一个人吧。现在好了,在编 程中,于一类的事物可以只取一个名字,而参数不同就可以进行处理了,这样 不仅可以节约名称(有意义名字总有用完的一天) ,还可以让系统去自动根据参 数的不同来进行处理。很强的功能哦。 在一个类中,如果多个方法(不包括基类中的方法)具有“相同的方法名称和不 同的参数形式” ,那么称这个方法名称被“重载” 。 “不同的参数形式”意味着:参数个数不同,或参数个数相同但“相同位置处有 不同类型的参数”
3、 。 编译器将根据实际传入的参数形式选择调用匹配的重载方法。 下面还是举个例子来说明的好。 例如我们有两个名为“移动”的方法命令,参数不一样,一个方法只有一 个参数是文本型,表示地点,另一个方法有两个参数是 XY 坐标。公开 类 启动类 公开 静态 启动 ()好朋友.移动(“大连“);好朋友.移动(123,456);-_ 公开 类 好朋友 公开 静态 移动(文本 地点)控制台.输出行(“移动到“+地点);公开 静态 移动(小数 坐标 X ,小数 坐标 Y)控制台.输出行(“移动到“+坐标 X.到文本()+“,“+坐标 Y.到文本(); 运行结果如下:怎么样,厉害吧,易飞扬编译器生成的代码会自动
4、处理一些事情的,有点 智能化哦。实际上将“重载”理解为“重名”就好了。封装封装讲继承之前要讲到封装的。 封装听起来很可怕,其实它什么也不是。就是将类装在一个盒子里,不可 见,外国人以前称之为黑盒子,现在叫封装,换汤不换药而已。 还记得前面说过的类中有不公开的私有成员吗?这个就是其他人不可见了, 就称之为封装了。 白皮书中是这样说的:类可以使用私有成员存储内部数据,可以使用私有 方法对内部数据进行处理,可以通过公开或扩展的属性、方法、事件对外界提 供操作接口,这些都是类的封装机制的体现。 也就是你的好朋友自己有五脏六腹,不用你给他就有,他也不会给你看, 因为这是他的隐私。但是他有衣服、名字等这些
5、外在的东西你能看到,他会说 话,这是他的公开的接口,虽然我们并不了解他的真实想法,这也是一种保护 的方法。 具体的例程看前面的没有公开属性的类方法命令就行了。-_继承继承父母的财产可以由孩子来继承,父母的基因可以传承给子女,传承后可能 有些基本的没有改变,有些就有些改变了。下面是两个公开类,类名不一样, 但是小汽车是个子类,他的父类就是汽车。汽车可以包含的子类很多,如公交 车,卡车等。 下面给出代码: 公开 类 汽车 公开 移动(文本 地点)控制台.输出行(“移动到“+地点);公开 移动(小数 坐标 X ,小数 坐标 Y)控制台.输出行(“移动到“+坐标 X.到文本()+“,“+坐标 Y.到文
6、本(); 公开 类 小汽车 公开 移动(文本 地点)控制台.输出行(“安装火箭移动到“+地点);公开 移动(小数 坐标 X ,小数 坐标 Y)控制台.输出行(“安装火箭移动到“+坐标 X.到文本()+“,“+坐标 Y.到 文本(); 调用的代码为以下: 公开 类 启动类 公开 静态 启动 ()汽车 奇瑞 = 创建 汽车; /汽车 奇瑞 = 创建 小汽车; 奇瑞.移动(“大连“);奇瑞.移动(123,456);-_ 大家可以看到,上述代码中 如果将第一行的创建代码屏蔽,与将第二行的创建代码屏幕后的执行效果 是不一样的。因为小汽车继承了父类汽车的两个方法,因此根据创建时的不同, 运行效果也就不一样
7、了。 这个哪里运用最多呢?这样有什么好处呢? 1原来,可以将一些类封装为类库,然后公开接口,如果你对某个类不满 意,你就可以继承他的类,原始的类库不用更改。 2也方便大型软件的共同开发,架构师将父类全部定义好,即使是空的没 有代码的也无所谓了,然后由下面的工程师制作子类继承,将真实的代码写入。3改进软件也成为一件非常方便的事,如果某个类中的功能不适合使用了, 需要升级了,就可以再一次地继承他,方便了程序的升级。多态多态多态实际上是与对象紧密相联系的。在类中,可以创建一个方法,如果这 个方法中采用了对象作为参数,那么如果对象传递时是基类,那么就按基类进 行处理,如果对象传递时是子类,那么就按子类
8、进行处理。 大家看下面的代码: 公开 类 基类 公开 输出()控制台.输出行(“基类“); 公开 类 子类 公开 输出()控制台.输出行(“子类“); 上述代码中有两个类,一个是基类,一个是子类。那么都有相同的输出方 法,且子类的输出方法覆盖了父类的输出方法。 当创建不同的对象时,那么如果传递了这些不同的对象,就会按不同对象 进行处理,代码如下: 公开 类 启动类 公开 静态 启动()-_基类 基类1 = 创建 基类();子类 子类1 = 创建 子类();测试多态(基类1);测试多态(子类1);静态 测试多态(基类 参数)参数.输出(); 上述代码中,可以看到,加了一个“创建多态”的方法命令,
9、而这个方法 命令的参数是对象,因此当上述“启动”方法命令中创建了两个不同的对象, 一个是父对象,一个是子对象,于是在调用“测试多态”的静态方法时,就根 据不同的对象进行了不同的处理。接口接口“接口” 很简单,就是这样一种东西:就是空的方法组成的一个类,打包 成类模块,然后供大家一起调用。 这个类里的方法中,没有具体的代码,就是一个空的表,也可称之为接口 表。类似于 C 语言中的头文件。接口具体的好处是在于多人工程开发时,由系 统分析师制定出统一标准的接口,程序师进行具体接口程序的编程,这样大家 在进行大型工程项目时就通过接口进行沟通了。 使用“接口”时要注意以下几点: 1接口只“声明”一个或多
10、个“公开”的方法,但不提供方法的实现代码。 也就是不需要系统分析师写代码。 2定义接口方法时可以省略掉方法的“公开”属性,编译器默认其具有此 属性。也就是说系统分析师可以偷一些懒了。 写接口的格式样例如下:公开 接口 接口 1 公开 接口方法 1();公开 接口方法 2(); 接口声明与类声明是同级别的。 3只有类可以实现接口。一个类可以实现多个接口。一个接口可以实现多 个方法。 4接口文件编译为类库后,由系统分析师提交给程序师具体实现,不必提 供类库的源文件。也就是说上述接口定义的代码保存为 EF 文件,然后编译为-_ECL 文件,只要提供程序员 ECL 文件给他们编程就可以了。 5接口类似
11、一种“规范” ,如果某个类实现了此接口,表明此类遵循了此 规范,以后就可以按照这种规范的要求来使用此类。 6当系统分析师提供类以后,由程序师来实现接口的具体代码时,要将此 接口中的所有方法实现,一个也不能少哦,编译器会做严格的检查。 一个类欲实现某个接口,意味着这个类“必须实现这个接口(及其所有基 接口)中声明的所有方法” 。 7实现接口,就是由程序师具体实现原来接口表中空方法的代码。那么在 定义类时,程序师需要将接口的信息告诉类。 定义类时,通过“接口实现表”属性来指定该类所实现的接口,示例代码 如下: 类 类 1 /指定单个已实现的接口 公开 接口方法 1()/这里需要程序员添加具体实现代
12、码公开 接口方法 2()/这里需要程序员添加具体实现代码 类 类 2 /指定多个已实现的接 口 /. 上述代码中,类 1 指定了一个接口,类 2 指定了多个接口,具体的代码在 接口方法中实现。 上述的代码保存为 EF 文件后可以进行编译,在编译为 EXE 文件时,会检 查 ECL 类库中的接口情况,如果正常,那么对于接口的调用就相当于对于类中 具体实现代码的调用。 接口通过“定义接口” 、 “实现接口”的两个步骤后,下面就可以进行“使 用接口”了。定义接口是由系统分析师进行的工作,实现接口是由程序师进行 的工作,一般大的项目就会这样安排,以利于分工合作,但是如果小的项目一 般用不上,即使用上了
13、,上述的也可能是一个人进行的。例如,在系统核心库中已有一个现成的接口,并且被编译为 ECL 类库,接 口原代码可能为以下形式:(定义接口) 公开 接口 错误处理 公开 逻辑 处理错误(整数 错误码, 文本 错误文本);-_ 实现接口的代码可以写成以下内容: 公开 类 错误处理类 公开 逻辑 处理错误(整数 错误码, 文本 错误文本)控制台.输出行(“哈哈,系统运行时错误被我捕获!“);控制台.输出(“错码码“); 控制台.输出行(错误码);控制台.输出行(错误文本);返回 真; 调用接口的代码可以为以下形式: 公开 类 启动类 公开 静态 启动()控制台.输出行(“测试中“);错误处理 自定接
14、口 = 创建 错误处理类;运行环境.置错误管理器(自定接口);对象 对象 1; / = 创建 对象();控制台.输出行(对象 1.到文本(); /故意使用 “空“ 对象 当调用接口的方法时,就相当于调用了具体对象实现的方法。 其中有两行大家要注意:错误处理 自定接口 = 创建 错误处理类;运行环境.置错误管理器(自定接口); 上述代码中可以看到, “错误处理类”对象被声明到“错误处理”这个接口 中,然后下面一行对接口的操作实际上就是对对象的操作。总结总结大家也可以先学习旧版易语言中的面向对象,等熟悉之后,再学习易飞扬 就非常轻松了。对比如下: 面向对象因素VB易语言易飞扬 构造/初始有有有 析
15、构/清理有有有-_继承不支持有有 虚拟方法不支持有有 多态不支持有有 封装有有有 重载/重名无无有 接口无无有易语言中的面向对象教材可以通过学习易语言编程系统第十八章,或 “易语言知识库 ESDN资料手册开发手册易语言面对对象编程”中可以 找到。看教材的目的就是要实用,那么上述用了好朋友进行比喻,如果应用到实 际程序中将会如何呢?你要将你的数据库系统用分类的方法进行分门别类,如 菜单类,快捷键类,数据库操作类这样,一个具有人性化的程序就会出来 了,里面的命令程序只要按面向对象的方法调用就行了。 好了,大话面向对象到此暂告一段落,希望通过这些小小的比喻大家能了 解掌握面向对象的知识,逐步看一些大
16、一些的面向对象的例程,看的时候大家 可以将这些大例程中的对象用概念图画出他的层次结构,互相之间的继承关系, 以这样的方式对对象进行研究,这样基本上就能看明白了。 最后要告诉大家的是,我还会写更多的教材和练习给大家看,毕竟在大量 的练习下才会有长足的进步。面向对象并不难, 细细品味易飞扬, 道法自然是根本, 编程世界谁称王!本章主要介绍易语言子程序的创 建和调用、子程序参数的使用以及参 数属性的设置方法。第 8 章 易语言的子程序-_将程序分割成较小的功能单元就可以简化程序设计任务,这些功能单元被称为子程序,可以把共享的或常调用的功能置于子程序中,达到简化程序设计、方便代码重用和提高程序维护效率
17、的目的,这是结构化程序设计的主要特征之一。 子程序可把程序划分成相对独立的功能单元,每个单元都比无子程序的整个程序容易调试和理解;一个应用程序中的子程序,往往不必修改或只需稍作改动,便可以成为另一个程序的子程序。8.1 新建子程序新建子程序本章学习内容本章学习内容:8.1 新建子程序 8.6 参数的参考属性 8.2 调用子程序 8.7 子程序的返回值 8.3 两类子程序的区别 8.8 课后练习 8.4 子程序参数 8.5 参数的可空属性下面我们就开始新建第一个自定 义子程序。方法十分简单,一步一步 跟我来吧!将光标移到代码编辑行, 右键单击,在弹出菜单中选择 “新子程序”命令,就可以新建 子程
18、序。首先在 启动窗口添 加一个按钮, 默认名称为 “按钮 1” 。 双击按钮 1 进入代码编 辑界面。另一种更快 捷的方法是,在 代码编辑区获 得焦点时,同 时按下“Ctrl 键”和“N 键” , 也可以新建子 程序。新建子程 序的默认名称 为“子程序 1” , 依此类推。-_8.2 调用子程序调用子程序第三种方法,到 主菜单上。选择“插 入” “新子程序”命 令也可新建子程序。注意: 在同一 个程序集中, 子程序名不能 重复。特别在 修改的时候, 易语言会提示 并修改已经被 使用过的名称。“子程序 1” 已经存在, 当另一个子程 序被修改成 “子程序 1”时, 易语言弹出出 错提示。被易语言
19、修改的子程序名。新建的子程序没有参数,这需要操作者自行添加所需数目的参数并设置参 数的类型以及参数的可空、参考和数组等属性。 特别应该注意的是,每个新建的子程序都不会被易语言或其它子程序自动 调用,下面将讲解如何调用子程序。前一节中讲了如何建立子程序, 下面演示如何调用一个子程序。-_在“子 程序 1”中 添加代码:信息框(“你好!我是信息框。 ” ,#信息图标, ) 在“_按钮 1_被单击”事 件子程序中添 加程序代码 “ 子程序 1() ” 或直接复制名 称,将其粘贴 过来。在“按 钮 2”事件 子程序中添 加代码 子程序 1() 。同一个子 程序可以被多 次调用。一个子程序可以在事件子程
20、序和其它新建的子程序中多次被调用,也可以被其它程序集的事件子程序和新建的子程序调用。要注意的是,在本程序中定义的子程序只能在本程序中使用。每次调用子程序时,子程序中的所有命令都将从第一条开始顺序执行,当执行到子程序尾部或者遇到“返回”命令时即返回到调用此子程序命令的下一条命令处。按 F5 键运行程序,分别单击“按钮 1”和“按钮 2” , 都能弹出“子程序 1”里的信息框。把“子 程序 1”修 改为“信息 框子程序” 。这里的 “子程序 1”同 时被修改为 信息框子程 序 。-_8.3 两类子程序的区别两类子程序的区别上节中提到了子程序名称的问题,这里我们还要提一个小建议。当要 修改一个子程序
21、名称时,应该直接到这个子程序的定义位置进行修改。这 样可以使调用它的程序代码同步修改该子程序的名称,如上图所示。这可 以避免因调用无效子程序导致的编译错误。大家可以看到,子程序必须由其它子程序调用才能被执行。子程序的调用方法与命令的调用方法完全一致。虽然新建的子程序(自定 义子程序)和事件子程序的调 用方法一样,但它们之间也有 一些不同之处。光标选中 子程序名称, 按 Enter 键添 加一个参数。这是“_按 钮 1_被单击” 子程序的原型, 没有参数。输入参数 名称并设置 类型。最后 按 F5 键运 行程序,单 击“按钮 1” , 信息框不见 了。信息框看不到的原因是“_按钮 1_被单击”子
22、程序参数结构被改变,易语言就会把它当作新建的子程序,和“按钮 1”没有任何联系了,而新建子程序可以任意的添加参数。请大家自行总结一下新建的子程序和事件子程序的区别。-_8.4 子程序参数子程序参数参数和变量的使用方法一样,可以使用赋值语句 在参数内临时存储数据。参数有参数名参数名(用来在程序 中引用一个参数)、数据类型数据类型(确定参数能够存储数 据的种类)以及“可空”和“参考”等属性。参数只 能在定义它的子程序中使用,相当于局部变量。把 8.3 中“_ 按钮 1_被单击”事件子程序的“参数1”删除。在“信息 框子程序”添 加两个文本型 参数“参数 1”和“参数 2” 。参数的 “类型”属性
23、可为空。如果 空,默认为整整 数型数型。按 F5 键, 程序无法运行, 在输出面板中可 以看到出错提示。 这就说明我们还 要在调用上述子 程序时提供具体 的参数。-_用光标选中此 行并双击,在括号 内添加“, ”号,按 Enter 键。看到了 吗?调用子 程序的命令 前多了个 “”号, 我们可以将 它展开。展开的方 法:直接双击 或用键盘上的 右光标键。参数提示和实 际参数的内容 是互相对应的, 在上面添加文 本型数据“易 语言” ,当程序 运行时,下面 “参数 1”保存 的数据就是 “易语言” 。接下来我们在程序中为子程序提供具体的参数数据。用 “Ctrl+Tab”组合键切换到界面设计状态,
24、在窗体上添加两个标签和两 个编辑框,并将标签的标题属性设置为“输入 123” ,提示用户。标签的标 题在此处设置。-_这是前面提到的“按 钮 1” ,下面的是“按钮 2” 。切换到代码编辑 状态,在子程序调用 处,分别为两个参数 提供数据(编辑框提 供的文本型数据) 。子程序如需要接收参数数据,必须先在子程序定义处的参数表部分定义所需的参数。调用有参数的子程序时所传递过来的数据将被顺序地填入对应的参数中。如果传递过来的数据与对应位置处的参数数据类型不一致,在可以互相转换时,系统将自动将传递过来的数据转换成对应参数的数据类型后再赋值给该参数;如果不能转换,就会产生运行时错误。如上面的第 2 步在
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 教学 教材 资料
限制150内