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