OOP技术:易语言面向对象学习

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

OOP技术:易语言面向对象学习

当前有很多编程语言都是支持面向对象的,如:DELPHI、VC++、JA V A等,但大家对于概念性的一些内容,取很难去理解、学习,有的学习者因为概念入不了门,使得放弃了进一步深入学习。现在,易语言3.8版也支持类(Class)了,因此,本文通过介绍易语言的面向对象的概念,使大家更加容易地学习了解,再去学习其它语言中的相关知识就不会那么难了。

一.枯燥的理论

1.对象和类

要讨论“面向对象”,大家必须首先搞懂什么是“对象”。面向对象编程语言中的“对象”概念和我们日常生活中说的“对象”、“东西”或“实体”非常相似(其实编程语言中的“对象”就是从现实生活中的“对象”、“实体”的概念发展而来的)。可以指你面前的这台戴尔电脑或你家楼下的那辆奔驰轿车,也可以指你们公司的销售员小张。

编程语言中的“类”的概念也和现实生活中的“类”非常相似。也是对某一类有共同特征的“东西”(实体,也许我们应该称“对象”)的概括。可以看出,“类”是一个抽象的概念,比如当你提到“电脑”这个概念时,你指的不是你面前的这台电脑,不是你家隔壁超市西面出口处用于结帐的那台电脑,也不是世界上任何一台具体的电脑,而是指“电脑”这个抽象的概念,是“具有处理器、存储器和输入、输出设备的电子设备”。同样,“员工”指的也不是你们公司是小张,不是我们公司的小王,也不是世界上任何一家公司的任何一个具体的工作人员,而是“服务于某家公司并定期领取薪水的人”。上面我们所说的“电脑”和“员工”就是两个“类”,因为它们分别概括了某一类型的“对象”的基本特征。另外要说明的一点是:“类”和“所有这类对象的集合”也是不一样的,因为后一个概念虽然也很全面,但它指的仍然是一大堆具体的对象,而不是一个抽象的概念。这也许有点像在玩文字游戏,希望你能适应并喜欢这种游戏规则,毕竟做任何事情都是需要“规则游戏”的,面向对象编程也不例外哦。

2.类的“成员”与“方法”

每个类一般有它的属性,比如每个员工都有自己的“姓名”,每到月底都可以领到“日工资”乘以“本月出勤天数”算出来的工资。这里的“姓名”、“日工资”和“本月出勤天数”就是“员工”这个类的属性(或叫“成员”)。而每月工资的计算方法(日工资* 本月出勤天数)就的“员工”类的一个“方法”。在易语言中的类模块中,一个类看起来就像一个程序集,类的成员看起来就像一个程序集变量,类的方法看起来就像程序集中的一个子程序。(注意,只是看起来像,它们之间还是有很明显地区别的)

3.实例化

实例化指的是从一个类到这个类的对象(实例),就像上面说的从“员工”到你们公司的小张。一个类并不是一个可操作的实体,它只是一个概念,只有对象才是可操作的,比如你们公司必须把薪水发放给具体的人(比如小张),而不是发放到抽象的“员工”或“销售员”。在易语言中,生成一个类的实例对象(实例化)就是定义一个以这个类为数据类型的变量。可以在通过点(.)来使用这个对象的方法,进而操作这个对象(类似于调用“窗口1.移动(……)”来移动“窗口1”)。

4.继承

“电脑”、“员工”这两个“类”虽然强大,概括了许许多多的“对象”,但是他们毕竟太宽泛了,有时候我们需要更具体一点的概念。比如别人问你,你家的那台电脑是台什么样的电脑,你就绝对不会回答:“我家的那台电脑是一台‘电脑’”,而是说出你的电脑的品牌,

或具体的配置(比如一台“戴尔8530电脑”或“一台奔腾3电脑”)。同样,你会对别人说,你们公司的小张是一个“销售员”。前面提到的“戴尔8530电脑”和“销售员”同样都是类,但是他们分别比“电脑”、“员工”这两个个类更加具体。这里你从“电脑”到“戴尔8530电脑”和从“员工”到“销售员”用的就是“继承”,因为前面的每两对概念中的后一个都具备了前一个的所有特征(比如“销售员”肯定服务于某家公司并定期领取薪水),但是有都比前一个具有更多或更具体的特征(比如销售员有具体的工作:负责销售,“销售员”的薪水可能比普通的员工要高一些)没错,编程语言中的继承就是这样的。总的说来,“继承”指的是从一个相对比较宽泛的类到一个相对具体一点的类。在一个继承关系中相对较宽泛的类被称做后一个类的“基类”,相对较具体的类被称做前一个类的“派生类”。当然,从这个相对较具体的类还可能会得出更加具体一点的类,这又是一个继承关系,这时,这个“相对较具体的类”又成为了“更加具体一点的类”的基类,后一个就是前一个的“派生类”,这样的“具体化”还可能无限继续下去。但是“继承”绝对不能具体化到某个具体的“实体”也就是对象(比如从销售员“具体化”到你们公司的销售员小张),因为继承只能发生在两个“类”之间,一旦从类具体化到了对象那就不叫“继承”了,就成了“实例化”。

二.牛刀小试

1.定义一个类,生成实例对象

有了理论基础,我们来牛刀小试一把!

就以公司的员工为例子吧,打开易语言3.8新建一个窗口程序,插入一个“类模块”,输入如下代码:

本程序定义了一个类“员工”,这个类说明了所有公司员工的共同特性——都有一个姓名(当然,员工的共同属性肯定不止这些,这里为了简单,仅仅考虑“姓名”)并给它定义了一个文本型成员“姓名”同时提供了两个公开方法用于操作这个成员。其中“取姓名”方法只是简单地返回该类的唯一成员“姓名”;“置姓名”方法用于给“姓名”成员赋值。为了

确保“姓名”成员包含合法的姓名信息,程序在“置姓名”方法里加了参数合法性检查。

有了一个类,下面我们来进行“实例化”即从“员工”这个抽象的概念具体化到一个公司的员工——张三。

然后在启动窗口上放置一个按钮,并输入如下代码:

这里的程序定义了一个“员工”类型的变量“张三”,也就从“员工”类实例化了一个对象“张三”。由于“张三”是“员工”类的对象,所以他就具有了这个类的所有成员和方法,然后我们就可以调用张三这个对象的两个公开方法对它进行操作了。易语言中所有的类成员均为私有成员,所以我们无法直接通过对象给它的成员赋值,只能通过调用公开方法(张三.置姓名(“张三”))设置员工的姓名,而我们在“员工”的“置姓名()”方法中加了参数合法性检查,所以实现了对类成员的保护。(其实这个保护是不完整的,如果没有调用张三..置姓名(“张三”),这个员工还是没有姓名的,即用“张三.取姓名()”方法取得的为空文本,下面在讲“_初始化”方法时将解决这个问题。)

这里顺便说一下类方法的访问限制。一个类的方法可设置为“公开”或“受保护”,如果一个类的某个方法被“公开”就意味这这个方法可以被该类的其他方法、该类的实例对象和它的派生类访问(即调用);否则,这个方法就是“受保护”方法,受保护方法只能被该类的其他方法和它的派生类访问而不能通过该类的实例对象来访问。比如上面的“张三.置姓名(“张三”)”就是通过对象直接访问类的公有方法。你可以试着把“员工”类的“取姓名()”公开栏的勾号去掉把它变成一个受保护方法,再运行该程序,易语言编译器就会报错:“错误(10123): 指定方法“取姓名”未被公开,不能在外部被调用。”看来我们的易语言还是很聪明的哦。关于类方法在继承中的访问限制,我们将在最后面具体讨论。

注意:易语言中没有类的公有(公开)成员,它的所有成员均为私有,所以,一个类的所有成员都只能在类的内部使用,而不能通过“对象名.成员名= 值”的方式来直接访问类的成员。所以,如果你想把一个类的某个成员公开给外部使用,就必须给这个类添加相应的方法来取和置这个成员的值。

2.“_初始化”与“_销毁”

在上面的“员工”类的代码中,还有两个方法我没有提到,那就是这节的标题提到的那两个方法。仔细研究一下,你会发现这两个方法非常特别。第一:方法名都是以下划线开头;第二:它们都是“受保护”的;第三:它们都没有返回值和参数;第四:这两个方法是在我们插入一个类模块时自动生成的。形式的特殊决定了它们功能的特殊。这两个方法是“私有”的,即未公开的,也就是说它们只能在类内部使用。在什么时候使用呢?我们做个实验,在这两个方法中输入如下代码:

相关文档
最新文档