资源预览内容
第1页 / 共29页
第2页 / 共29页
第3页 / 共29页
第4页 / 共29页
第5页 / 共29页
第6页 / 共29页
第7页 / 共29页
第8页 / 共29页
第9页 / 共29页
第10页 / 共29页
亲,该文档总共29页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第4章 面向对象的程序设计方法,本章讲述的主要内容 4.1 面向对象程序设计的概念 4.2 类和模块 4.3 在应用程序中使用类 4.4 类的继承 4.5 通过继承实现多态性,4.1 面向对象程序设计的概念,4.1.1 面向对象与传统编程方法的不同 1. 传统程序设计方法的设计思路 例如,设计一个用户登录程序时,面向过程的程序设计思路如下: 1) 创建一个提供用户输入用户名和密码的应用程序界面。 2) 用户提交数据后首先判断用户名和密码是否为空,若为空提示出错,否则继续。 3) 判断用户输入的用户名是否为合法用户名。是,则继续,否则提示用户名错。 4) 判断用户输入的密码是否与输入的用户名匹配。是,则登录成功,否则提示密码错。 可以看出整个程序设计思路是按照事情的发展进行的,也就是围绕着事情发展的过程进行的。,4.1 面向对象程序设计的概念,4.1.1 面向对象与传统编程方法的不同 2.面向对象设计方法的设计思路 面向对象的程序设计方法模拟人类认识世界的思想方法,将所有实体看作一个对象。仍然是上面的例子,面向对象的程序设计思路如下: 1) 同样,首先需要创建一个提供用户输入用户名和密码的 应用程序界面。 2) 将用户看作一个对象。 3) 用户对象拥有一个用于检查用户名和密码合法性的方法。 4) 用户提交数据后,调用方法对数据进行检验,并根据检验返回结果确定用户登录是否成功。,4.1 面向对象程序设计的概念,4.1.1 面向对象与传统编程方法的不同 3. 面向对象程序设计方法的优点 首先,上述两种方法都能完成用户登录程序的设计,但采用面向对象的程序设计方法具有如下一些优点。 (1) 可扩展性 在传统的设计方法中功能的实现分散在了很多步骤中,对功能的扩展极为不利。而在面向对象的设计中,功能靠方法来实现,需要新功能时只需要创建新的方法即可,保证了面向对象设计的可扩展性。 (2) 分工明确 面向对象的设计方法中将所有问题都划分成相应的对象,程序功能依靠方法来实现,从而使程序各部分有了明确的分工。当因对象发生变化需要修改程序时,可通过较小的局部改动来完成新的需求,保证了程序具有良好的可移植性。,4.1 面向对象程序设计的概念,4.1.1 面向对象与传统编程方法的不同 4. 面向对象程序设计的基本步骤 前面介绍过,在Visual Studio中进行简单应用程序设计时的主要步骤为: 需求分析设计程序界面设置控件对象属性编写实现功能及控制界面的代码 使用面向对象技术进行程序设计时的基本步骤为: 1) 需求分析。 2) 创建一个或多个需要的类,声明其属性和方法。 3) 设计程序界面(用户操作界面)。 4) 在事件处理程序中对类进行实例化得到相应的对象,通过操作对象的属性,调用对象的方法来实现设计目标。,4.1 面向对象程序设计的概念,4.1.2 类和对象 1. 类和对象的概念 面向对象程序设计中“类”的概念从本质上和人们现实生活中的类概念是相同的。例如在编程实践中经常使用按钮(Button)控件,每一个具体的按钮是一个按钮对象,而按钮类则是所有按钮对象的抽象。把这种抽象用计算机编程语言表示为数据集合与方法集合的统一体,就构成了类,然后再用这个类创建一个个具体的按钮对象。 也可以把类比作一种蓝图,而对象则是根据蓝图所创建的实例,可以把类比作生产模具,而对象则是由这种模具产生的产品(实例)。所以人们又把对象叫做类的实例。类是对事物的定义,而对象则是该事物本身。,4.1 面向对象程序设计的概念,4.1.2 类和对象 2. 面向对象的三个重要特征 (1) 封装性 开发人员并不需要完全了解类体内每句代码的具体含义,只需通过对象来调用类内某个属性和方法即可实现需要的功能,这就是类的封装性。 (2) 继承性 一个类可以拥有它继承的类的所有成员,而不需要重新定义,这种特性在面向对象编程技术中称作对象的“继承性。 (3) 多态性 多态性是指在基类中定义的属性或方法被派生类继承后可以进行更改。,4.1 面向对象程序设计的概念,4.1.3 类成员的基本概念 1. 字段 2. 属性 3. 方法 4. 构造函数与析构函数,4.2 类和模块,4.2.1 创建类 其语法格式为: 访问修饰符 Class 类名 字段成员 属性成员 方法成员 事件成员 构造函数 析构函数 End Class,4.2 类和模块,4.2.1 创建类 1. 声明类字段 字段的声明格式与普通变量的声明格式相同。在类体中,字段声明的位置没有特殊要求,习惯上将字段声明在类体中的最前面,以便于阅读。例如: Class Student 定义一个Student类 声明类的3个字段变量 private _name, _stuclass As String private _grade As Single End Class,4.2 类和模块,4.2.1 创建类 2. 声明类属性 在类定义中声明属性的语法格式为: 访问修饰符 Property 属性名() As 类型 Get Return 类变量 End Get Set (ByVal value As 类型) 类变量 = value End Set End Property,4.2 类和模块,4.2.1 创建类 3. 使用访问修饰符 访问修饰符确定了在什么范围中的对象可以访问类成员。访问修饰符的规定与声明类时使用的修饰符含义相同。 在类定义中,如果声明的属性、方法、事件等没有使用任何访问修饰符,则该成员被认为是私有的(private)。如果不涉及继承,private与protected没有什么区别。如果成员被声明为private或protected,则不允许在类定义外使用点运算符访问。 在一个类定义中,通常字段被声明为private或protected,这样在类定义外将无法看到字段成员,这就是所谓“数据隐藏”。其他成员通常被声明为public,以便通过这些成员实现对类的字段成员的操作,类定义中的属性用于完成最基本的,对字段的读写操作。,4.2 类和模块,4.2.2 类的方法与重载 1. 定义类的方法 在类中创建方法的语法格式1为: 访问修饰符 Sub 方法名(传递参数列表) 方法体语句块 End Sub 在类中创建方法的语法格式2为: 访问修饰符 Function 方法名(传递参数列表) As 返回值类型 方法体语句块 Return 表达式 向调用语句返回值 End Function,4.2 类和模块,4.2.2 类的方法与重载 2. 方法的重载 有时方法实现的功能需要针对多种类型的参数,虽然VB有隐式转换功能,但这种转换在有些情况下会导致运算结果的错误,而有时数据类型无法实现隐式转换甚至根本无法转换。有时方法实现的功能需要处理的数据个数不同,这时会因为传递实参的个数不同而导致方法调用的失败。 为解决上述问题,VB允许在同一个类中声明多个具有不同参数集(不同参数数量、不同参数数据类型、不同参数顺序)的同名方法,调用方法时VB编译器能根据调用语句传递过来的参数的具体情况自动选择相应的方法,这种处理方式称为“方法重载”。,4.2 类和模块,4.2.3 方法参数的传递方式 1值参数传递方式 值参数传递方式是指声明时使用ByVal修饰符修饰参数的传递方式。当使用值类型的参数调用方法时,编译程序将实参的值做一份副本,并且把此副本传递给该方法的相应形参。被调用的方法不会修改内存中实参的值,所以使用值参数时可以保证实参值是安全的。 2引用参数 在参数前加上ByRef修饰符声明的参数为引用型参数。值类型参数传递的是实参值的副本,而引用型参数向方法传递的是实参的地址,使得实参的存储位置与形参的存储位置相同。,4.2 类和模块,4.2.4 构造与析构函数 1. 构造函数 构造函数实际上是一种特殊的方法,每次创建类的实例时都会调用它,构造函数的主要作用就是自动初始化成员变量。一般情况下不需要为类定义相关的构造函数,因为基类(Object类)提供了一个默认的实现方式。只有在创建类对象的同时为对象设置一些初始状态时才需要声明自定义的构造函数。定义构造函数的语法格式为: 访问修饰符 Sub New(参数列表) 构造函数的主体 End Sub,4.2 类和模块,4.2.4 构造与析构函数 2. 析构函数 析构函数也是一种特殊的方法,主要用来在销毁类的实例时,自动完成内存清理工作,又称为垃圾收集器 一般来说,对象的生命周期从构造函数开始,以析构函数结束。在创建类的实例时,需要调用构造函数为其分配内存,而当类的实例的生命周期结束前,还必须释放它所占有的内存空间。在一个类中可能有许多对象,每个对象的生命期结束时,都要调用一次析构函数。 需要说明的是,有析构函数的对象占用的资源较多,在内存中驻留时间较长,在垃圾回收器检查到时并不会被销毁,并且还会调用专门的进程负责,从而消耗了更多的系统资源。因此析构函数不能滥用,建议只有在必须时才使用析构函数。,4.2 类和模块,4.2.5 类的共享成员 在类成员定义中使用Shared修饰符表示的类成员称为类的“静态成员”。类的共享成员可以是共享字段、共享属性或共享方法。 共享成员属于整个类,所以对共享成员的访问不需要有类的对象实例存在,可直接通过类名称访问。 访问共享成员的语法格式为: 类名称.成员名称 由于共享成员属于整个类,所以在任何地方修改这些成员都将体现在该类的所有实例对象中,包括已经存在和新创建的类对象。同样,类的共享属性只能访问共享字段和共享方法,共享方法也只能访问类的共享字段和共享属性。,4.2 类和模块,4.2.6 模块 模块(Module)是VB提供的一种重要的引用类型。它与类十分相似,可以用来封装数据和程序。 向Windows应用程序项目中添加模块的操作方法如下。 项目创建或打开后,在解决方案资源管理器窗口中用鼠标右键单击项目名称,在弹出的快捷菜单中执行“添加”下的“模块”命令,在打开的对话框中选择模板类型为“模块”并填写模块文件名后单击“添加”按钮,系统将自动向项目中添加一个扩展名为“.vb”的模块文件。模块文件中的代码以“Module 模块名”开始,以“End Module”结束,开发人员可将需要的代码书写在二者之间即可。 模块主要是为应用程序提供全局变量和全局方法。模块中可以包含字段变量成员和方法成员,它们的作用及创建方法与类中的字段、方法基本相同。模块中成员的访问权限有Public和Private。使用模块中公开的成员时无需实例化,可以在程序中直接调用。,4.3 在应用程序中使用类,4.3.1 声明和访问类的对象 声明类的对象,也称为“类的实例化”,其声明方法与声明基本数据类型的方法基本相同,语法格式为: 声明类的对象,也称为“类的实例化”,其声明方法与声明基本数据类型的方法基本相同,语法格式为: Dim 对象名 As New 类名 访问对象就是访问对象成员,即在应用程序中使用由类创建的对象,其代码编写格式与访问一般常用对象的代码格式完全相同。,4.3 在应用程序中使用类,4.3.2 向项目中添加类项和类库 1. 添加类项(类文件),4.3 在应用程序中使用类,4.3.2 向项目中添加类项和类库 2. 添加类库,4.4 类的继承,4.4.1 基类和派生类 1. 继承的基本规则 1) 继承的单一性。派生类只能继承一个基类,而不能继承多个继承。 2) 继承是可传递的。例如,彩色电视机从黑白电视机中派生,液晶电视机又从彩色电视机中派生,那么液晶电视机不仅继承了彩色电视机中声明的成员,同样也继承了黑白电视机中的成员。 3) 派生类应当是对基类的扩展。派生类可以添加新的成员,但不能除去已经继承的成员的定义。 4) 派生类可以重写基类的成员。 5) 构造函数和析构函数不能被继承。在派生类中调用带参数的基类构造函数时应使用MyBase.New(参数列表)语句。,4.4 类的继承,4.4.1 基类和派生类 2. 类继承的应用示例 【演练4-3】,4.4 类的
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号