[Word]《易飞扬面向对象编程》第2版
《易飞扬面向对象编程》
每年公司周年庆我都会有个小小的礼物给大家的,今年也不例外,教材是最好的礼物了,本文简单介绍了“易语言.飞扬”系统的面向对象编程方法,易飞扬还在紧张地开发之中,愿大家与易飞扬一起成长。
“易语言.飞扬”官方网站:
“易语言.飞扬”官方论坛:
《“易.自.然”编程思想》地址:
;ID=100873&page=1
“易语言.飞扬”集成编译环境(大众版):
;ID=100588&page=1
《易飞扬面向对象编程》........................................................................ 1
分类 ................................................................................................ 2
启动 ................................................................................................ 3
公开 ................................................................................................ 4
私有 ................................................................................................ 4
静态 ................................................................................................ 5
非静 ................................................................................................ 6
对象 ................................................................................................ 7
成员 ................................................................................................ 9
初始 .............................................................................................. 10
清理 .............................................................................................. 10
属性 .............................................................................................. 11
事件 .............................................................................................. 12
创建 .............................................................................................. 13
销毁 .............................................................................................. 14
重载 .............................................................................................. 14
封装 .............................................................................................. 15
继承 .............................................................................................. 16
多态 .............................................................................................. 17
接口 .............................................................................................. 18
.............................................................................................. 20
由于“易语言.飞扬”还未完全成型,在此过程中如果有所改动,教材也会相应的改动,但是对于面向对象的编程来说,基本上是不会变的,因此本书作者才有信心将面向对象的编程方法写出来。
之所以本书的名称中有“编程思想”一样,我们不是为了编程而去编程,那种整天加班,一天到晚累得半死的生活并不是我们这些程序员理想中的生活,对于工作与生活的态度,也影响到我们编程中去,如何仿照自然的方法去编程,去生活同样具有重要的意义。
那么什么是“对象”呢,这个问题一直困扰着很多编程的入门者,有说对象就是组件,有说对象就是类的实体化,虽然我不反对用这些术语,但我反对让初学者搞不明白,实际上,“对象”就是你的一个好朋友,这个好朋友的功能强大,能够帮助你完成你所设计的事情,那么,下面我们就介绍一直在你身边的这个好朋友吧。
分类
物以类聚,人以群分,朋友也是这样,如果你交个好朋友,那么就会受益无穷,如果你交了个损友,那么后果不难想象,所谓近墨者黑,近朱者赤,君子之交淡如水,也就是说交一些具有平常心的朋友,不会让你去冒险,不会让你心烦意乱。
好了,想法是好的,那么就会去找,如果真的找到了,那么就恭喜你,如果找不到,也不必伤心。那么我们理想中的好朋友就是对象,而真实的好朋友就是对象的实体,我们把他们分为一类人“好朋友”,还有就是“普通朋友”、“同事”、“老师”、“陌生人”等。
通过以上,可以了解到面向对象编程中“类”与“对象”的关系。“类”相当于“好朋友”、“普通朋友”、“同事”、“老师”、“陌生人”等这些思想的划分,而具体的某个人就是类的“实际对象”。理想中的好朋友具有相关的特性,比如有身高,年纪,性格等信息,也可以在人生的道路上帮助你成长。
在面向对象中,把“相关特性”称为“数据成员”,虽然听起来很奇怪,但大家只要了解到,与老易语言中的属性是差不多的。
在面向对象中,把“功能”称为“方法”,虽然听起来很奇怪,但大家只要了解到,与老易语言中的方法命令是差不多的。
下面就来看第一个易飞扬类的代码吧。
上述代码中,控制台就是一个对象,也是你的好朋友,他具有“输出行”这样的方法命令,后面所接就是他的参数:“输出的文本”。而“输出的文本”是在上一行中进行了定义的,是一个文本变量,并且内容是“易语言,你好~”,这样一想,这个具体的好朋友还没有分类呢,于是将这个好朋友分为“启动类”,这个行为作为“启动类”的一个“启动”方法去执行。
启动
上面已经说过了,在上述这段代码中,有一个类——“启动类”,这是我们对好朋友的划分,在该类中有一个方法——“启动”方法,这是好朋友能做的事情。花
括号里面的代码就是事情的具体步骤。
好了,上述代码是可以执行的,大家还记得如何运行吗,不会的请看本书第一章节中的内容。
在易飞扬中,程序的运行要依赖一个很重要的类——它的类名为“启动类”。在“启动类”的下面有一个必有的方法——“启动”方法,用法如其名,该方法是易飞扬程序的入口,也就是说,易飞扬的程序要从这个方法下面的代码进行运行。大家可以把这个“启动”方法看成是老易语言中的“_启动子程序”子程序。这样大家就可以很容易的看懂上面的代码了。
注意了,“启动类”必须是“公开”的;而“启动”方法必须是“公开”且“静态”属性。大家先不要管什么是“公开”、“静态”,只要记下来就好了,继续看下面的文字吧。
在“启动”方法中的代码,相信大家也能理解到了,是用控制台输出一行文字,文字的内容是“易语言,你好~”。
不管如何,大家跟我学编程,我是不会亏待大家的,给大家一个小诗来说明我的归纳结果,大家有空就将这个口诀背下来哦,当出现对好朋友不理解时,只要背一下这个小诗,就基本上能解决问题了。
口诀一:
面向对象靠分类;
声明类有属性
。
公开大家都能用;
私有隐藏保安全。
内部静态调静态;
外部类名加成员。
非静创建类对象;
对象名加类成员。
面向对象靠分类;
(面向对象中由类组成基本单位,一个类中有多个方法)
声明类法有属性。
(类有类的属性表,方法有方法的属性表)
内部静态调静态;
(在内部(类中)静态成员只能被静态成员所调用;)
外部类名加成员。
(而在外部(类外),只能通过“类名.”加成员名的方法进行调用。) 非静创建类对象;
(“非静态”成员的使用方法是:用类生成的“对象名”,“.”,类成员) 对象名加类成员。
(同上)
公开大家都能用;
(具有公开属性的类或方法,在其他的类或方法中可以直接调用,“公开”就是可被调用,其方法的引用就是类名+方法名即可。)
私有隐藏保安全。
(私有属性只是为了安全考虑,不向其他程序员公开,因此使用时只能在类的内部使用)
难免本文还是要先来说明一下这些类或类成员名称前面的这些名词是做什么用的。
公开
面向对象靠分类;
声明类有属性表。
公开大家都能用;
私有隐藏保安全。
私有
了解“公开”与“私有”
哈哈,现在的人都是说自己有人权保护的,因为每个人都有自己的隐私,你的好朋友也不例外,当你的好朋友出现在你面前时,他公开了他的形象和语言,以及行为,但他回家后,是自己会吃饭、睡觉等,这些是不会公开给你看的哦。这样的好处是,你的好朋友不会随时公开他的行为,他就具有自主性,自动性,对他也是个保持哦。
在面象对象中也是这样,当公开时,其他人都是可视的可调用的,但也设置一个“私有”属性,对这个类进行保护,保护的重要意义在于,这些都是内部的工作,自动完成的,不需要其他人为的干涉,否则就是干涉内政,或干涉别人的隐私罗。
无论类、还是类中方法与属性,都可以设定它对外部是否可见,这个“可见”便是在被外部应用时是否可被调用。“公开”就是可被调用,而“私有”则不能。私有是面向对象中的一个重要工具,用于保护一些不想被外部调用的功能实现,保证安全性。
静态
内部静态调静态;
外部类名加成员。
非静创建类对象;
对象名加类成员。
了解“静态”与“非静态”
你的好朋友可有不同的类型哦,有的是好静,喜欢听你的诉说,有的好动,自己就滔滔不绝,让人发笑,一般人都是喜欢安静,静胜燥,柔胜钢,阴盛阳衰,我也说多了,哈哈。
方法具有“静态”属性,如果没有这个属性就说明是“非静态”的方法。
“静态”从字面上是很难理解的,在我看来,只是给方法加上了一些限制而已。在内部(类中)静态成员只能被静态成员所调用;而在外部(类外),只能通过“类名.”加成员名的方法进行调用。在外部调用静态方法时,也可以把它看作老易语言中的“子程序”,这样大家可能会更好的理解它。
好,给大家一个例程,以说明静态的调用方法是与老易语言中的一样的。
下面是一个“好朋友”的类,其中明两个方法命令:“说话”和“行走”,代码如下:
调用程序代码如下:
运行结果如下图所示:
可以看到以上的静态方法的调用,都与原老易语言的“子程序”或组件的调用方法是差不多的。
当然了,当一个方法公开时,在其他类中是可以调用的,如果一个方法是私有的,那么在其他类中就不可调用。
如将上述“说话”或“行走”改为私有属性,那么在“启动”方法中就不能调用了。
非静
“非静态”成员的使用方法的关键在于先用“对象”创建后再使用创建的对象调用。
将上述的做一个反例来用,例如:将上述代码中的“说话”和“行走”方法命令中的静态属性去掉,就不能通过编译,代码如下:
如果我们改为以下的调用方式,就又可以进行正常的编译运行了:
上述代码中,用好朋友这个类,生成了一个新的对象“张三”,由于张三已成为好朋友的一个具体的对象,因此使用此对象调用这个类中的方法命令“说话”和“行走”。而大家在实际编程中,可以将方法命令换成你想要操作的其他功能,如建立菜单,打开窗口,处理数据等,也就实现了你的面向对象的程序了。
“非静态”成员的使用方法是:
用类生成的“对象名”,“.”,类成员
其中“类成员”可以是非静态的数据和非静态的方法命令。
对象
下面大家可能会产生个疑问,一是在类的内部调用非静态方法命令时,是否也需要先声明一个对象呢,解决疑问的方法是自己动手,写几个不同的例子,用易飞扬编译后来验证一下。下面进行例子的比较。
先来研究一下:在类的内部调用非静态方法命令时,是否也需要先声明一个对象呢,回答是:也是必须要先创建一个对象才能使用。
通过的代码如下所示:
上述代码中,可以看到,在好朋友的类中,定义了一个“调用”的方法,此方法中又创建了一个叫赵强的对象实体,由这个对象实体调用好朋友类的“说话”非静态方法。如何看待这种现象呢,可以将静态方法看作是此类的外部工具,表现形式如下:
这样大家就易于理解为何可以在类的内部再创建他自己本身了。也就表明静态类实际上与类本身是无关的,而非静态类是依赖于类本身的。
成员
对于类的数据成员的理解,其实也是很简单的,我们只要把它看成是对象的“属性”就可以了。这个属性,就像是“好朋友”的姓名,衣服颜色一样的特征。
在“易语言用户”类的开头,声明了一个“公开”的文本数据成员“姓名”,用于保存易语言用户的姓名。在“易语言用户”类的方法成员中调用了该数据成员的值,并利用控制台输出,这样就可以在有很多客户的情况下,区分我们正在与哪个用户进行交流。
调用的代码:
运行的结果如下:
在“启动”方法中,声明创建了两个“易语言用户”类对象,“李文”、“张剑”,并分别给这两个对象的“小名”属性赋了值。如何区分是哪位用户有动作呢,就要通过用记的“小名”进行区分了。
通过以上的简单讲解,相信大家对面向对象有个入门的了解,然后大家可以将上述代码中无用的控制台命令换成有用的程序代码,就可以实现面向对象的编程了。当然,继续了解了下的事物对编程更加有用。
初始
实际上“初始化”是一个特殊的类方法命令,类似于老易语言的“_初始化”子程序,希望你对老易语言中的面向对象有所了解。
也就是说:当一个类的对象被创建时,“初始化”方法被自动调用;这个初始化方法可以不写,如果写了就会被首先执行,一般来说,这是用于对类的创建时的预置环境用的,相当于一个配置工具。我们用易语言不是也要配置一些东西,自己习惯的东西吗,致于您要配置什么,就根据需要写什么吧。
我们选朋友时也是这样,需要一定的
,适合的朋友才选择,不适合的朋友就选离,所谓“君子务本,本立而道生。”
“初始化”必须是非“静态”的、非“私有”的、无返回值的类成员方法,可以没有参数或有多个参数,允许被重载。
“静态初始化”方法必须是“公开”的、“静态”的、无返回值且无参数的类成员方法。
以上所有方法均可以被省略,如果被省略,易语言编译器会自动生成其默认实现。也就是默认有一个空的初始化方法存在,任务是什么也不做。
编译器在编译具有基类的类的任一初始化方法之前,如果发现该初始化方法中不存在“调用其基类初始化方法的语句”,将自动在首部插入一条调用其基类默认初始化方法(即无参数的初始化方法)的语句,以确保基类的初始化方法被调用。
清理
实际上“清理”是一个特殊的类方法命令,类似于老易语言中的“_销毁”子程序。
也就是在类结结果束前进行一些清理的工作。比较安慰的是,易飞扬具有内存自动清洁功能,否则在这一步将要大家花费大量的时间进行内容的清理工作。如果大家不写这个类方法,默认是自动产生一个空的清理方法,当然是什么也不做啦。不过中国人交朋友都是有始有终的,也称之为善始善终。既然有出生、相遇„„,就有分别、死亡„„,这是万世不灭的道理。
“清理”必须是“公开”的、非“静态”的、无返回值且无参数的类成员方法。
系统在调用类的“清理”方法之后,总是会调用其基类的“清理”方法。这是一个递归过程,最终的结果是,该类的最基础类(系统.对象)的“清理”方法被最后调用。
属性
在成员中实际上已讲了一些属性的概念,那是成员属性,相当于老易语言中组件的属性。
在此还要讲的是“属性方法”,在易语言的使用中,大家一定是非常羡慕组件中的属性不仅可以赋值,还可以读取吧,现在你也可以了。
下面给出一个例子:
在上述代码中,“易语言用户”类设置了一个“年龄”属性方法,用于返回属性值,第二个带有整数参数的“年龄”属性方法,用于接受属性的赋值。
启动类中,读取属性的值,实质上是调用属性读取方法;对属性赋值,实质上是调用属性设置方法。
怎么样,你也可以制作属性了吧。
事件
大家还记得在老版易语言中,那个按钮被单击事件,按钮被双击事件„„吗,这是大家很羡慕的一件事吧,您可能一直在想,怎么我做不了这种事件呢,从我的角度来看,这个就是一个特殊的方法,这个方法有特别的规定。看看下面一个事件子程序的代码:
上述代码中,大家可以看到,在声明的部分,只是比普通的方法多了“事件接收”字样,在后面的参数中“被单击事件”去除事件两个字后,“_被单击”拿到了前面与组件相接,形成事件名称。在老版易语言中也是规定好的“_按钮_被单击”事件是固定不变的,如果变了就不起作用了,在这里也是这样的,如果不按规定写,就不会与事件的产生起作用了。换句话说,对组件的事件处理是通过匹配这些文本后进行相应的处理的。
有个例子是说明了这个问题的。就是带窗口的计算器的例子,这个例子对每个按钮被按下的事件进行了处理。
写到这里,提醒大家的事,这个易飞扬还没有完全成型,因此语法还在改之中,原来称“事件”,后改为“事件接收”,最新改为“事件处理”,这个大家要理解哦,每次更改都是为了精益求精。
创建
前面我的描述都是太简单了,现在开始,我还是要将正统的面向对象的概念介绍给大家。“重载”、“封装” 、“继承”和“多态”这些都是非常重要的。
在面向对象中有一句老话:“万物皆对象”,这句话并不高深哦,有些类似于物理上常用的“万物都有原子组成”,哈哈,看到这里,大家也就可以理解了,如果想要编程的话,那么将所有操作的窗口、组件、单元都看成一个对象,然后对这个对象进行操作就好了呀,编程的思路会更加清晰的。
创建其实前面例子中大家都用过了,类似于用“对象类的名字”后接空格和“你取的新生成对象的名字”后接“,”等于号加上“创建”关键字及“对象类的名字”。
白皮书中介绍的语法:
创建 类名称[([参数表])]
编译器将根据参数表自动搜寻并调用合适的“初始化”方法。
创建类的对象,会导致该类及其所有基类中的“初始化”方法被调用。最基础类(系统.对象)的“初始化”方法被最先调用,该类自身的“初始化”方法被最后调用。如果其中某个类有多个重载的“初始化”方法,编译器将根据规则选择其中之一调用。
示例:
对象 对象1 = 创建 对象;
学生对象 张三 = 创建 学生对象("张三");
销毁
用户不需要关心对象何时被销毁以及如何销毁。这完全是“垃圾收集器”的工作。
在对象被销毁之前,其“清理()”方法会被系统调用。用户可在此方法中做一些处理,但这种需求并不多见。
重载
那么对于一个类中的方法命令,如果重名了,就是“重载”。这个问题的由来类似于中国人口那么多,那么叫“王强”、“赵军”的不计其数,这个就是重名了,但人还是不一样的,因为那么多人不可能是一个人吧。现在好了,在编程中,于一类的事物可以只取一个名字,而参数不同就可以进行处理了,这样不仅可以节约名称(有意义名字总有用完的一天),还可以让系统去自动根据参数的不同来进行处理。很强的功能哦。
在一个类中,如果多个方法(不包括基类中的方法)具有“相同的方法名称和不同的参数形式”,那么称这个方法名称被“重载”。
“不同的参数形式”意味着:参数个数不同,或参数个数相同但“相同位置处有不同类型的参数”。
编译器将根据实际传入的参数形式选择调用匹配的重载方法。
下面还是举个例子来说明的好。
例如我们有两个名为“移动”的方法命令,参数不一样,一个方法只有一个参数是文本型,表示地点,另一个方法有两个参数是XY坐标。
公开 类 启动类
{
公开 静态 启动 ()
{
好朋友.移动("大连");
好朋友.移动(123,456);
}
}
公开 类 好朋友
{
公开 静态 移动(文本 地点)
{
控制台.输出行("移动到"+地点);
}
公开 静态 移动(小数 坐标X ,小数 坐标Y)
{
控制台.输出行("移动到"+坐标X.到文本()+","+坐标Y.到文本());
}
}
运行结果如下:
怎么样,厉害吧,易飞扬编译器生成的代码会自动处理一些事情的,有点智能化哦。实际上将“重载”理解为“重名”就好了。
封装
讲继承之前要讲到封装的。
封装听起来很可怕,其实它什么也不是。就是将类装在一个盒子里,不可见,外国人以前称之为黑盒子,现在叫封装,换汤不换药而已。
还记得前面说过的类中有不公开的私有成员吗,这个就是其他人不可见了,就称之为封装了。
白皮书中是这样说的:类可以使用私有成员存储内部数据,可以使用私有方法对内部数据进行处理,可以通过公开或扩展的属性、方法、事件对外界提供操作接口,这些都是类的封装机制的体现。
也就是你的好朋友自己有五脏六腹,不用你给他就有,他也不会给你看,因为这是他的隐私。但是他有衣服、名字等这些外在的东西你能看到,他会说话,这是他的公开的接口,虽然我们并不了解他的真实想法,这也是一种保护的方法。
具体的例程看前面的没有公开属性的类方法命令就行了。
继承
父母的财产可以由孩子来继承,父母的基因可以传承给子女,传承后可能有些
基本的没有改变,有些就有些改变了。下面是两个公开类,类名不一样,但是小汽
车是个子类,他的父类就是汽车。汽车可以包含的子类很多,如公交车,卡车等。
下面给出代码:
公开 类 汽车
{
公开 移动(文本 地点)
{
控制台.输出行("移动到"+地点);
}
公开 移动(小数 坐标X ,小数 坐标Y)
{
控制台.输出行("移动到"+坐标X.到文本()+","+坐标Y.到文本());
}
}
公开 类 小汽车 <基类 = 汽车> {
公开 移动(文本 地点)
{
控制台.输出行("安装火箭移动到"+地点);
}
公开 移动(小数 坐标X ,小数 坐标Y)
{
控制台.输出行("安装火箭移动到"+坐标X.到文本()+","+坐标Y.到文本
());
}
}
调用的代码为以下:
公开 类 启动类
{
公开 静态 启动 ()
{
汽车 奇瑞 = 创建 汽车;
//汽车 奇瑞 = 创建 小汽车;
奇瑞.移动("大连");
奇瑞.移动(123,456);
}
}
大家可以看到,上述代码中
如果将第一行的创建代码屏蔽,与将第二行的创建代码屏幕后的执行效果是不一样的。因为小汽车继承了父类汽车的两个方法,因此根据创建时的不同,运行效果也就不一样了。
这个哪里运用最多呢,这样有什么好处呢,
1(原来,可以将一些类封装为类库,然后公开接口,如果你对某个类不满意,你就可以继承他的类,原始的类库不用更改。
2(也方便大型软件的共同开发,
师将父类全部定义好,即使是空的没有代码的也无所谓了,然后由下面的工程师制作子类继承,将真实的代码写入。
3(改进软件也成为一件非常方便的事,如果某个类中的功能不适合使用了,需要升级了,就可以再一次地继承他,方便了程序的升级。
多态
多态实际上是与对象紧密相联系的。在类中,可以创建一个方法,如果这个方法中采用了对象作为参数,那么如果对象传递时是基类,那么就按基类进行处理,
如果对象传递时是子类,那么就按子类进行处理。
大家看下面的代码:
公开 类 基类
{
公开 输出()
{
控制台.输出行("基类");
}
}
公开 类 子类<基类="基类">
{
公开 输出()
{
控制台.输出行("子类");
}
}
上述代码中有两个类,一个是基类,一个是子类。那么都有相同的输出方法,且子类的输出方法覆盖了父类的输出方法。
当创建不同的对象时,那么如果传递了这些不同的对象,就会按不同对象进行处理,代码如下:
公开 类 启动类
{
公开 静态 启动()
{
基类 基类1 = 创建 基类();
子类 子类1 = 创建 子类();
测试多态(基类1);
测试多态(子类1);
}
静态 测试多态(基类 参数)
{
参数.输出();
}
}
上述代码中,可以看到,加了一个“创建多态”的方法命令,而这个方法命令的参数是对象,因此当上述“启动”方法命令中创建了两个不同的对象,一个是父对象,一个是子对象,于是在调用“测试多态”的静态方法时,就根据不同的对象进行了不同的处理。
接口
“接口” 很简单,就是这样一种东西:就是空的方法组成的一个类,打包成类模块,然后供大家一起调用。
这个类里的方法中,没有具体的代码,就是一个空的表,也可称之为接口表。类似于C语言中的头文件。接口具体的好处是在于多人工程开发时,由系统分析师制定出统一标准的接口,程序师进行具体接口程序的编程,这样大家在进行大型工程项目时就通过接口进行沟通了。
使用“接口”时要注意以下几点:
1(接口只“声明”一个或多个“公开”的方法,但不提供方法的实现代码。也就是不需要系统分析师写代码。
2(定义接口方法时可以省略掉方法的“公开”属性,编译器默认其具有此属性。也就是说系统分析师可以偷一些懒了。
写接口的格式样例如下:
公开 接口 接口1
{
公开 接口方法1();
公开 接口方法2();
}
接口声明与类声明是同级别的。
3(只有类可以实现接口。一个类可以实现多个接口。一个接口可以实现多个方法。
4(接口文件编译为类库后,由系统分析师提交给程序师具体实现,不必提供类库的源文件。也就是说上述接口定义的代码保存为EF文件,然后编译为ECL文件,只要提供程序员ECL文件给他们编程就可以了。
5(接口类似一种“规范”,如果某个类实现了此接口,表明此类遵循了此规范,
以后就可以按照这种规范的要求来使用此类。
6(当系统分析师提供类以后,由程序师来实现接口的具体代码时,要将此接口中的所有方法实现,一个也不能少哦,编译器会做严格的检查。
一个类欲实现某个接口,意味着这个类“必须实现这个接口(及其所有基接口)中声明的所有方法”。
7(实现接口,就是由程序师具体实现原来接口表中空方法的代码。那么在定义类时,程序师需要将接口的信息告诉类。
定义类时,通过“接口实现表”属性来指定该类所实现的接口,示例代码如下:
类 类1 <接口实现表 = 接口1> //指定单个已实现的接口
{
公开 接口方法1()
{
//这里需要程序员添加具体实现代码
}
公开 接口方法2()
{
//这里需要程序员添加具体实现代码
}
}
类 类2 <接口实现表 = 接口1, 接口2, 接口3> //指定多个已实现的接口
{
//......
}
上述代码中,类1指定了一个接口,类2指定了多个接口,具体的代码在接口方法中实现。
上述的代码保存为EF文件后可以进行编译,在编译为EXE文件时,会检查ECL类库中的接口情况,如果正常,那么对于接口的调用就相当于对于类中具体实现代码的调用。
接口通过“定义接口”、“实现接口”的两个步骤后,下面就可以进行“使用接口”了。定义接口是由系统分析师进行的工作,实现接口是由程序师进行的工作,一般大的项目就会这样安排,以利于分工合作,但是如果小的项目一般用不上,即使用上了,上述的也可能是一个人进行的。
例如,在系统核心库中已有一个现成的接口,并且被编译为ECL类库,接口原代码可能为以下形式:(定义接口)
公开 接口 错误处理
{
公开 逻辑 处理错误(整数 错误码, 文本 错误文本);
}
实现接口的代码可以写成以下内容:
公开 类 错误处理类 <接口实现表 = 错误处理> {
公开 逻辑 处理错误(整数 错误码, 文本 错误文本)
{
控制台.输出行("哈哈,系统运行时错误被我捕获~~~");
控制台.输出("错码码");
控制台.输出行(错误码);
控制台.输出行(错误文本);
返回 真;
}
}
调用接口的代码可以为以下形式:
公开 类 启动类
{
公开 静态 启动()
{
控制台.输出行("测试中");
错误处理 自定接口 = 创建 错误处理类;
运行环境.置错误管理器(自定接口);
对象 对象1; // = 创建 对象();
控制台.输出行(对象1.到文本()); //故意使用 "空" 对象
}
}
当调用接口的方法时,就相当于调用了具体对象实现的方法。
其中有两行大家要注意:
错误处理 自定接口 = 创建 错误处理类;
运行环境.置错误管理器(自定接口); 上述代码中可以看到,“错误处理类”对象被声明到“错误处理”这个接口中,
然后下面一行对接口的操作实际上就是对对象的操作。
总结
大家也可以先学习旧版易语言中的面向对象,等熟悉之后,再学习易飞扬就非
常轻松了。
对比如下:
面向对象因素 VB 易语言 易飞扬
构造/初始 有 有 有
析构/清理 有 有 有
继承 不支持 有 有
虚拟方法 不支持 有 有
多态 不支持 有 有
封装 有 有 有
重载/重名 无 无 有
接口 无 无 有
易语言中的面向对象教材可以通过学习《易语言编程系统》第十八章,或“易语言知识库ESDN?资料手册?开发手册?易语言面对对象编程”中可以找到。
看教材的目的就是要实用,那么上述用了好朋友进行比喻,如果应用到实际程序中将会如何呢,你要将你的数据库系统用分类的方法进行分门别类,如菜单类,快捷键类,数据库操作类„„这样,一个具有人性化的程序就会出来了,里面的命令程序只要按面向对象的方法调用就行了。
好了,大话面向对象到此暂告一段落,希望通过这些小小的比喻大家能了解掌握面向对象的知识,逐步看一些大一些的面向对象的例程,看的时候大家可以将这些大例程中的对象用概念图画出他的层次结构,互相之间的继承关系,以这样的方式对对象进行研究,这样基本上就能看明白了。
最后要告诉大家的是,我还会写更多的教材和练习给大家看,毕竟在大量的练习下才会有长足的进步。
面向对象并不难,
细细品味易飞扬,
道法自然是根本,
编程世界谁称王~