吾爱分享资源网

 找回密码
 立即注册
吾爱分享资源网 易语言相关 查看内容

易语言如何编程第二十章面对对象编程 类的说明及应用

2017-10-14 13:52| 发布者: admin| 查看: 126| 评论: 0|原作者: admin

摘要: 第二十章面对对象编程 类的说明及应用 面对对象编程,可以说是当前最流行的编程方式,当前流行的面对对象的编程语言很多 ,如:C++、JAVA等等。易语言3.8版推出后,同样紧跟编程语言发展的方向,也开始全面支持面 ...
                                                                                第二十章面对对象编程 类的说明及应用
面对对象编程,可以说是当前最流行的编程方式,当前流行的面对对象的编程语言很多 ,如:C++、JAVA等等。易语言3.8版推出后,同样紧跟编程语言发展的方向,也开始全面支持面对对象编程。并且在中文化编程的基础上,简化了类的创建与使用,使面对对象的编写过程变的更加简单。
1类的插入
面对对象编程就离不开类的创建,下面首先介绍一下对象和类的区别。
对象(Object)是类(Class)的一个实例(Instance)。如果将对象比作房子,那么类就是房子的设计图纸。所以面向对象程序设计的重点是类的设计,而不是对象的设计。
易语言中,可以通过菜单“插入”→“类模块”来创建类,如图1所示:

QQ截图20171014134040.png
2.对象的构造和析构
创建后的类自动生成2个方法“_初始化()”和“_销毁()”。
“_初始化()”方法在基于该类的对象被创建后,会被自动调用,该方法的功能相当于构造函数;“_销毁()”方法,在基于该类的对象被销毁前,会被自动调用,该方法的功能相当于析构函数。在其他面向对象编程语言中,构造和析构函数是需要程序员自己创建的,易语言中简化了这个过程。
构造函数和析构函数用于在基于该类的对象被构造(创建)和析构(销毁)时初始化和销毁数据。
而对象的构造和析构的过程是自动的,构造顺序为:先构造基类对象,再构造其继承类对象,如果类中具有对象成员,则先于其所处对象构造;析构顺序为:先析构继承类对象,再析构基类对象,如果类中具有对象成员,则在其所处对象后析构。

编程时需要做的事情就是在“_初始化()”和“_销毁()”方法中,编写基于该类的对象创建和销毁时需要执行的。
3.类的封装
创建一个新类后,在“类名”上按下回车键,可以定义类的私有成员。点击Ctrl+N,可以新建一个方法,在新建的方法中编辑代码,就可以实现类的一些功能。
新定义方法,可以设置“公开”属性。没有设置“公开”属性的方法,在基于该类的对象创建后是不可见的,这样可以达到信息隐藏的目的,即让类仅仅公开必须要让外界知道的内容,而隐藏其它一切内容。如图2所示:

QQ截图20171014134242.png
类是将数据变量和方法封装在一起的,其中方法(函数)表示了类的行为,数据变量是类的私有成员(类的属性),私有成员只能由该类本身的方法代码所访问,属于私有性质。所以提倡“对象调方法,方法改属性”。
类的封装包含以下几个方面:
(1)类的所有成员数据变量只能由该类本身的方法代码所访问,属于私有性质。
(2)在继承类中可以以“类名.方法名”的方式指定访问基础类中的方法。
(3)只有标记为“公开”的方法才能在类代码外部通过该类的对象实体来访问。
4.类的继承性
易语言在新创建一个类的时候,可以看到有一个名为“基类”的项目,该项目用来定义本类的基础类。该项目不填写内容的情况下,该类就没有基类;如果在该项目中填入一个类的名称,那么该类就是从填写的类中派生而来的。派生后的类具有继承性。
如,当前已经创建了一个类1,那么在创建类2的时候在基类中填入“类1”,这样类2就是类1的派生类。如图3所示:

QQ截图20171014134425.png
派生出的类具有继承性,如图3中 ,“类1”是一个基类,“类2”是“类1”的派生类,那么“类2”就继承了“类1”的所有方法。
下面用在画板中画各种图形的例程,来进一步说明类继承性。
首先创建一个基类“图形”,并创建它的各种方法。代码如下:

QQ截图20171014134542.png
然后创建它的派生类:“椭圆”
QQ截图20171014134620.png
“椭圆”是“图形”的派生类,这样“椭圆”就继承了“图形”类中的所有公开的方法 ,即“椭圆”也具有了“图形”中所公开的方法。这样在“椭圆”对象创建后就可以调用这些继承的方法:


QQ截图20171014134656.png
可以看到“图形”类中的“取颜色()”和“取结束位置()”方法,没有设置“公开”属性,所以在基于“椭圆”(“图形”类的派生类)的对象被创建后,没有公开的方法即被隐藏起来了。
注意:在一个派生的类中,可以直接调用其父类的方法。“椭圆”类的绘画方法中,就直接调用了其父类的“取颜色()”方法,将填充颜色取出:

QQ截图20171014134747.png
这里要注意,虽然子类中可以直接调用父类的方法,但子类调用父类的方法取出和更改的都是自身的私有成员,而不能直接取得和更改父类的私有成员值。而例程中正确的设置了颜色,是由于程序中使用了覆盖。覆盖后面会详细介绍。
5.类的多态性
程序中,创建了一个类型为“图形”的数组,程序运行后,将其子类的变量依次加入到数组中,代码如下:

QQ截图20171014134833.png
通过运行上述程序,可将4个子类对象变量加入到父类 “图形对象”数组对象变量中,
以后程序可以通过:“图形对象[X].方法名()”来调用对应子类的不同方法。
易语言中类的多态性是指对象变量的多态性。
这种将子类变量赋值给父类变量的方法,体现了对象变量的多态性。
6.虚拟方法
虚拟方法,又称为虚函数,是一种虚拟出的方法。
虚拟方法就是允许被子类重新定义父类的方法,这就是常说的函数的覆盖(overload)。其他编程语言中通过“virtual”关键字来定义虚函数,在易语言中可以不用定义,只要子类中有和父类参数和属性完全相同的方法,然后通过上面讲到的子类变量赋值给父类变量的作法,可以达到覆盖虚方法的目的。当然也可以定义一个抽象虚方法(纯虚函数 ),即一个空方法,只提供方法的框架而不编写任何代码,实现的过程完全通过子类的覆盖来实现。
例程中,“图形”基础类定义了一个“绘画()”的方法,该方法中没有任何代码,是一个抽象虚方法(纯虚函数),程序又定义了“图形”类的几个派生类,包括“直线”、“矩形”、“椭圆”和“圆角矩形”,这些派生类中,都定义了同名的“绘画()”方法,派生类的“绘画()”方法实现了在画板中画出相应的图形。
例程中,当按下鼠标并移动,则在画板中跟随鼠标移动来画出所选图形,当鼠标被松开 ,就在画板中确定画出指定图形,代码如下:

QQ截图20171014134955.png
程序中,调用了图形对象的“绘画()”方法,而在“图形”类中的“绘画()”方法是没有编写任何代码的,在这里,它会在画板中画出各种图形,是由于其派生类中的“绘画”方法将“图形”类(它的父类)中的“绘画()”方法覆盖了,这种子类可以重新定义父类函数的特性,充分体现出了函数的多态性。这个覆盖的过程是动态的,即在编写类的时候,不定义某个方法要执行的代码,当调用此方法时,系统自动根据所调用的
对象实体去调用对应的方法。
这里说继承的作用是为了代码的重用,那多态则是为了实现接口的重用。像例程中提供的绘画方法的接口,通过覆盖实现了画出多种不同的图形。
1、易语言支持类的构造、析构、继承、虚拟方法、多态、封装特性。
2、对象的构造:
构造顺序为:先构造基类对象,再构造其继承类对象,如果类中具有对象成员,则先于其所处对象构造。
3、对象的析构:
析构顺序为:先析构继承类对象,再析构基类对象,如果类中具有对象成员,则在其所处对象后析构。
4、继承:
任何类均可以指定另外一类作为其基类,继承层数不限。
5、虚拟方法:
在基类中的方法可以被其继承类中的同名方法覆盖,当调用此方法时,系统自动根据所调用的对象实体去调用对应的方法。
6、多态性:
可以将一个继承类对象赋予到其基类数据类型变量中,此时对此基类对象变量进行操作,将反映出继承类对象的特性。
7、类的封装:
A、类的所有成员数据变量只能由该类本身的方法代码所访问,属于私有性质。
B、在继承类中可以以“类名.方法名”的方式指定访问基础类中的方法。
C、只有标记为“公开”的方法才能在类代码外部通过该类的对象实体来访问。


全部结束

鲜花

握手

雷人

路过

鸡蛋

相关阅读

相关分类

QQ|Archiver|手机版|小黑屋|吾爱分享资源网 ( 苏ICP备17042175号 | 苏公网安备 32108102010177号 )

GMT+8, 2018-10-17 09:04 , Processed in 0.137033 second(s), 31 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

返回顶部