易语言面对对象编程---类的创建与使用

 

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

1.类的插入

面对对象编程就离不开类的创建,下面首先介绍一下对象和类的区别。

对象(Object)是类(Class)的一个实例(Instance)。如果将对象比作房子,那么类就是房子的设计图纸。所以面向对象程序设计的重点是类的设计,而不是对象的设计。

易语言中,可以通过菜单“插入”→“类模块”来创建类,如图1所示:

1 创建新类

 

2.对象的构造和析构

 

创建后的类自动生成2个方法“_初始化()”和“_销毁()”。

_初始化()”方法在基于该类的对象被创建后,会被自动调用,该方法的功能相当于构造函数;“_销毁()”方法,在基于该类的对象被销毁前,会被自动调用,该方法的功能相当于析构函数。在其他面向对象编程语言中,构造和析构函数是需要程序员自己创建的,易语言中简化了这个过程。

构造函数和析构函数用于在基于该类的对象被构造(创建)和析构(销毁)时初始化和销毁数据。

而对象的构造和析构的过程是自动的,构造顺序为:先构造基类对象,再构造其继承类对象,如果类中具有对象成员,则先于其所处对象构造;析构顺序为:先析构继承类对象,再析构基类对象,如果类中具有对象成员,则在其所处对象后析构。

编程时需要做的事情就是在“_初始化()”和“_销毁()”方法中,编写基于该类的对象创建和销毁时需要执行的代码。

 

3.类的封装

创建一个新类后,在“类名”上按下回车键,可以定义类的私有成员。点击Ctrl+N,可以新建一个方法,在新建的方法中编辑代码,就可以实现类的一些功能。

新定义方法,可以设置“公开”属性。没有设置“公开”属性的方法,在基于该类的对象创建后是不可见的,这样可以达到信息隐藏的目的,即让类仅仅公开必须要让外界知道的内容,而隐藏其它一切内容。如图2所示:

2 私有成员及方法

 

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

类的封装包含以下几个方面:

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

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

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

 

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、只有标记为“公开”的方法才能在类代码外部通过该类的对象实体来访问。

 

 

易语言的“类”

组件实现

构造

诞生

_初始化”

创建完毕

析构

死亡

_销毁”方法

将被销毁

继承

父子有共性

“基类”与派生类,父类与子类

重用组件

虚拟方法

也有特性

同名同姓

也有特性

更改属性方式事件

多态

多种能力

双胞姓

对象变量的多态性

函数的多态性

实现功能不一样

组件名可一样

封装

私有财产

通讯地址

公开身份

成员数据

指定访问

公开方法

子程序变量

指定组件访问

 

少重载

类指针

操作符

事件

 

 

下载:画图.e