易语言

1.8易语言面对对象编程

奶瓶 · 6月1日 · 2020年 · · 77次已读

面对对象编程,可以说是当前最流行的编程方式,当前流行的面对对象的编程语言很多,如:C++、JAVA等等。易语言3.8版之后,同样紧跟编程语言发展的方向,也开始全面支持面对对象编程。并且在中文化编程的基础上,简化了类的创建与使用,使面对对象的编写过程变的更加简单。

1.类的插入

面对对象编程就离不开类的创建,下面首先介绍一下对象和类的区别。
对象(Object)是类(Class)的一个实例(Instance)。如果将对象比作房子,那么类就是房子的设计图纸。所以面向对象程序设计的重点是类的设计,而不是对象的设计。
易语言中,可以通过菜单“插入”→“类模块”来创建类,如图1所示:

图1 创建新类

2.对象的构造和析构

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

3.类的封装

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

图2 私有成员及方法

类是将数据变量和方法封装在一起的,其中方法(函数)表示了类的行为,数据变量是类的私有成员(类的属性),私有成员只能由该类本身的方法代码所访问,属于私有性质。所以提倡“对象调方法,方法改属性”。
类的封装包含以下几个方面:

  • 类的所有成员数据变量只能由该类本身的方法代码所访问,属于私有性质。
  • 在继承类中可以以“类名.方法名”的方式指定访问基础类中的方法。
  • 只有标记为“公开”的方法才能在类代码外部通过该类的对象实体来访问。

4.类的继承性

易语言在新创建一个类的时候,可以看到有一个名为“基类”的项目,该项目用来定义本类的基础类。该项目不填写内容的情况下,该类就没有基类;如果在该项目中填入一个类的名称,那么该类就是从填写的类中派生而来的。派生后的类具有继承性。
如,当前已经创建了一个类1,那么在创建类2的时候在基类中填入“类1”,这样类2就是类1的派生类。如图3所示:

图3 创建派生类

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

然后创建它的派生类:“椭圆”

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

可以看到“图形”类中的“取颜色()”和“取结束位置()”方法,没有设置“公开”属性,所以在基于“椭圆”(“图形”类的派生类)的对象被创建后,没有公开的方法即被隐藏起来了。

注意:在一个派生的类中,可以直接调用其父类的方法。“椭圆”类的绘画方法中,就直接调用了其父类的“取颜色()”方法,将填充颜色取出:

这里要注意,虽然子类中可以直接调用父类的方法,但子类调用父类的方法取出和更改的都是自身的私有成员,而不能直接取得和更改父类的私有成员值。而例程中正确的设置了颜色,是由于程序中使用了覆盖。覆盖后面会详细介绍。

5.类的多态性

程序中,创建了一个类型为“图形”的数组,程序运行后,将其子类的变量依次加入到数组中,代码如下:

通过运行上述程序,可将4个子类对象变量加入到父类 “图形对象”数组对象变量中,以后程序可以通过:“图形对象[X].方法名()”来调用对应子类的不同方法。

易语言中类的多态性是指对象变量的多态性。
这种将子类变量赋值给父类变量的方法,体现了对象变量的多态性。

6.虚拟方法

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

程序中,调用了图形对象的“绘画()”方法,而在“图形”类中的“绘画()”方法是没有编写任何代码的,在这里,它会在画板中画出各种图形,是由于其派生类中的“绘画”方法将“图形”类(它的父类)中的“绘画()”方法覆盖了,这种子类可以重新定义父类函数的特性,充分体现出了函数的多态性。这个覆盖的过程是动态的,即在编写类的时候,不定义某个方法要执行的代码,当调用此方法时,系统自动根据所调用的对象实体去调用对应的方法。

这里说继承的作用是为了代码的重用,那多态则是为了实现接口的重用。像例程中提供的绘画方法的接口,通过覆盖实现了画出多种不同的图形。

总结

1、易语言支持类的构造、析构、继承、虚拟方法、多态、封装特性。

2、对象的构造:

构造顺序为:先构造基类对象,再构造其继承类对象,如果类中具有对象成员,则先于其所处对象构造。

3、对象的析构:

析构顺序为:先析构继承类对象,再析构基类对象,如果类中具有对象成员,则在其所处对象后析构。

4、继承:

任何类均可以指定另外一类作为其基类,继承层数不限。

5、虚拟方法:

在基类中的方法可以被其继承类中的同名方法覆盖,当调用此方法时,系统自动根据所调用的对象实体去调用对应的方法。

6、多态性:

可以将一个继承类对象赋予到其基类数据类型变量中,此时对此基类对象变量进行操作,将反映出继承类对象的特性。

7、类的封装:

A、类的所有成员数据变量只能由该类本身的方法代码所访问,属于私有性质。

B、在继承类中可以以“类名.方法名”的方式指定访问基础类中的方法。

C、只有标记为“公开”的方法才能在类代码外部通过该类的对象实体来访问。

易语言的“类”组件实现
构造诞生“_初始化”创建完毕
析构死亡“_销毁”将被销毁
继承父子有共性“基类”与派生类,父类与子类重用组件
虚拟方法也有特性
同名同姓
也有特性更改属性方式事件
多态多种能力
双胞姓
对象变量的多态性
函数的多态性
实现功能不一样
组件名可一样
封装私有财产
通讯地址
公开身份
成员数据
指定访问
公开方法
子程序变量
指定组件访问
少重载类指针操作符事件

0 条回应