Visual Basic.NET程序设计课件 第6章 面向对象程序设计基础.ppt
《Visual Basic.NET程序设计课件 第6章 面向对象程序设计基础.ppt》由会员分享,可在线阅读,更多相关《Visual Basic.NET程序设计课件 第6章 面向对象程序设计基础.ppt(72页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、第6章 面向对象程序设计基础,6.1 基本概念 6.2 类和对象的定义 6.3 构造函数和析构函数 6.4 继承与派生 6.5 类的多态性 6.6 命名空间,面向对象程序设计是一种先进的程序设计方法,它把数据和对数据的处理封装在一起。 具体地说,它采用数据抽象和信息隐藏技术将需处理的数据对象和对数据对象的操作抽象成类。 程序设计人员可以利用类和对象编程来简化程序的设计,提高程序代码的可重用性,减少编程的工作量。 VB.NET是一种面向对象程序设计语言,它具有面向对象编程语言的三个基本特性:封装性、继承性和多态性。 本章介绍类、对象、继承、多态等面向对象程序设计中的基础知识以及VB.NET面向对
2、象程序设计的实现方法。,6.1 基本概念,在这一节中要介绍 类、对象、属性、事件和方法等基本概念。,6.1.1 类和对象,在现实社会中,通常把具有相同特征和性质的事物抽象出来构成一类。 例如,人、动物、房子、书和笔等都是“类”,它们具有不同的特征。 当这些“类”特指某一事物时,其特征必须有实际的值。这些实际的值就对应一个对象。 例如,某一个人:姓名张三,性别男,年龄18岁,民族汉族等,这就是人这个“类”的一个“对象”。 面向对象程序设计方法使用这种自然的逻辑思维来组织程序,把数据定义和对数据的操作定义为“类”,通过创建类的“对象”来使用类,达到信息封装和代码重用的目的,为实现大型复杂软件提供了
3、有效的技术。,.NET框架提供了功能强大的类库。 例如,在Windows应用程序中用于设计图形界面的控件类库,在该类库中定义了各种常用控件类。 窗体、按钮、文本框、图像框、列表框等都是在该类库中定义的控件类。 这些类以可视化的形式显示在工具箱中,当用户使用工具箱在界面上建立一个有名字、大小、颜色和位置等具体值的控件时,它就成为具体的控件对象。 事实上,可以在界面建立很多个名字、大小、位置和颜色各不相同的控件对象。 VB.NET除了可以使用框架类库中的类来设计程序外,还可以用面向对象的方法设计用户使用的类。,6.1.2 属性、事件和方法,对象可以看作是具有特殊属性和行为的一个可视化实体,每个对象
4、都有自己的数据成员、属性、事件和方法。 用来描述对象的性质和特征的信息称为数据成员或属性。 例如,描述圆的大小用Radius(半径)数据成员来实现。 又如,描述按钮的大小用 Width(宽)和Height(高)属性,描述按钮的位置用Left(左坐标)和Top(顶坐标)属性,描述按钮是否可见用Visible属性。,一般来说,每个对象都可以接收不同的事件,并能对这些事件做出响应。 事件是由VB.NET系统预先设置或者在程序中由程序员设计的,是能够被对象识别的动作。 例如,窗体有Load(装载)事件,按钮有click(单击)事件,文本框有TextChanged(文本改变)事件等。,方法是指类本身内含
5、的一些特殊过程。 使用这些内部自带的过程可以实现特定的功能。 例如,Console类有Write方法和WriteLine方法,调用它们可以输出数据。 又如,窗体类有Show方法,用于加载并显示窗体。 再如,在用户自定义的圆类中可以定义一个方法用于求圆的面积。,6.2 类和对象的定义,从形式上看,类是从结构演变而来的。但结构中只能包含数据成员,不能包含属性、事件和方法,而类中既可以包含数据成员,也可以包含属性、事件和方法。 也就是说,类将数据与属性、事件和方法封装在一起,组成一个不可分割的整体。 这就是面向对象程序设计封装性的基本技术。 类的成员包括数据成员、属性、事件和方法。,6.2.1 类的
6、定义,1类定义语句,一般格式: Class End Class 说明: Class是定义类的关键字。是用户自定义的标识符,用来标识类的名字。 为关键字Private、Protected或Public等,用来指定类或成员的不同访问特性,或者说不同的作用域。,Public用于声明公有成员。公有成员是类的接口,在类中和类外都可访问。 Protected用于声明保护成员。保护成员在类中及其派生类中都可访问。 Private用于声明私有成员。私有成员只能在类中访问,不能在类外访问。 省略时默认为Public,表示该类是全局的,在程序的任何地方都可以使用。 数据成员通常声明为Private,供类外部使用的
7、属性、事件和方法必须声明为Public。,例6-1,定义一个日期类。,Class D Private month As Integer Private day As Integer Private year As Integer Public Sub SetDate(ByVal m%, ByVal d%, ByVal y%) month = m : day = d : year = y End Sub Public Function IsLeapYear() Return (year Mod 4 = 0 And year Mod 100 0) Or _ (year Mod 400 = 0) E
8、nd Function Public Sub PrintDate() WriteLine(0, year 公有IsLeapYear函数过程用于判断给定日期所属年份是否为闰年; 公有PrintDate子过程用于输出日期。,2类定义的位置,在VB.NET中,类定义的程序代码从语法上来说可以设置在程序的不同地方。 归纳起来有如下常见的定义位置。,(1)在标准模块中定义类或与标准模块并列定义类。 例如,程序段: Module Module1 Class D End Class End Module 将D类定义在标准模块中。 又如,程序段: Class D End Class Module Module
9、1 End Module 将D类定义与标准模块并列。,(2)在窗体类中定义类或在窗体的代码窗口中与窗体类并列定义类。 例如,程序段: Public Class Form1 Class D End Class End Sub 把D类定义在窗体类中。 又如,程序段: Class D End Class Public Class Form1 End Sub 把D类和窗体类并列定义。,与变量定义一样,不论类定义在什么位置,都要遵从先定义后使用的原则。如果违背这个原则就会出现语法错误。,6.2.2 对象的定义与访问,类是抽象的,对象是具体的。在程序中,类定义之后,就可以定义对象。 类与数据类型的性质相似
10、,它可以看作是一种数据类型。 用类定义一个对象,实际上就是定义该类的一个变量。 所以,有时把对象称为对象变量,或称为类的实例。,1对象定义语句,在定义类对象之后,才能建立数据的存储空间,调用类的方法。 定义对象语句的一般格式: Dim|Private|Public As New 其中,关键字Dim、Private和Public的含义与普通变量的含义相同。 关键字New用来创建类的实例(即分配存储空间)。类名所指的类可以为预定义类,也可以为用户自己定义的类。 功能:定义对象,并创建类的实例。 例如: Dim D1 As New D 定义对象D1,并创建类的实例,即给D1分配存储空间。 该语句实际
11、上等价如下两条语句: Dim D1 As D D1=New D,如果省略New,则只声明了属于该类的一个对象,而并未创建该类的一个实例,即不分配存储空间。 例如: Dim D1 As D D1没有存储空间 对象是该类的一个变量,每个对象占用各自的存储单元,每个对象都具有该类的所有成员。 例如,有语句: Dim Date1 As New D Dim Date2 As New D 则定义的对象Date1和Date2各自都包括数据成员month、day和year 。 也可以各自调用方法成员SetDate、IsLeapYear和PrintDate。,2对象数组,在VB.NET中,也可以定义对象数组,该
12、数组中的每一个元素都是类的对象实例,每个元素可以作为一个对象来使用。 例如,语句: Dim A(10) As New D 定义了对象数组A,数组中的每一个元素A(0) A(1) , A(10)都是类D的对象实例,都可以以对象的形式访问成员。,3对象成员的访问,当定义了某个对象后,该对象具有对该类所有成员的访问权。在程序中访问对象成员的一般形式: . 例如,对象Date1的数据成员year表示为: Date1. year 它的方法成员SetDate、IsLeapYear和PrintDate表示为: Date1. SetDate Date1. IsLeapYear Date1. PrintDate
13、 又如,数组A第i个元素A(i)的数据成员year表示为: A(i). year 它的方法成员SetDate、IsLeapYear和PrintDate表示为: A(i). SetDate A(i). IsLeapYear A(i). PrintDate,注意: 只有Public成员才能在类外被访问,而对象Date1的成员year、month和day访问特性都是Private的,在类外不能被访问。 即在类外若有以下访问形式将导致编译错误: Date1. Month Date1. day Date1. Year,例6-2,编写程序测试例6-1所定义的日期类。,Imports System.Cons
14、ole Module Module1 Class D Private month As Integer Private day As Integer Private year As Integer Public Sub SetDate(ByVal m%, ByVal d%, ByVal y%) month = m : day = d : year = y End Sub Public Function IsLeapYear() Return (year Mod 4 = 0 And year Mod 100 0) Or _ (year Mod 400 = 0) End Function Publ
15、ic Sub PrintDate() WriteLine(0, year & . & month & . & day) End Sub End Class,Sub Main() Dim D1 As New D D1.SetDate(10, 1, 1949) D1.PrintDate() WriteLine(0, D1.IsLeapYear() End Sub End Module,运行程序,6.2.3 属性的定义及其使用,类中数据成员的值一般用来表示对象的状态和特征。 为了封装和隐藏类中的数据,提高安全性的目的,类中的数据成员一般定义为Private类型。 但是,程序中有时需要访问和修改对象数
16、据成员的值,从而使对象的状态和特征发生变化。 要做到这一点,可以采用两种方法: 把类中的数据成员的访问特性定义为Public; 在类中定义若干属性,使属性与类中数据成员相关联,并将这些属性定义为Public类型,外界通过对该属性的操作即可达到间接操作相应数据成员的目的。 第一种方法的缺点是不便于实现对数据成员值范围进行限制和设定数据成员对类外只读或只写。 此时,需要用类的属性来描述对象的状态和特征。,属性定义语句的一般格式: ReadOnly|WriteOnly Property ( ) As数据类型 Get Return End Get Set( ByVal Value As 数据类型 )
17、End Set End Property 说明: 为关键字Private、Protected、Public和Friend等,用来指定访问特性。,作用:通过属性得到数据成员的值。,作用:通过属性把值赋给数据成员。, Get过程用于设置只读属性,应至少包含一个Return语句,把属性值返回给外部程序。 若省略Return语句,则Get过程将返回属性数据类型的默认值。 仅使用Get过程定义属性时,其访问特性必须为ReadOnly。 即此时属性定义语句的格式: ReadOnly Property ( ) As Get(ByVal Value As 数据类型) Return End Get End Pr
18、operty 若省略Get过程,则该属性定义为只写属性。, Set过程用来设置只写属性。在属性赋值期间,VB.NET会将参数传递给Set过程,因此过程体中应至少包含一个赋值语句,把属性的值写入数据成员。 仅使用Set过程定义属性时,必须使用访问关键字WriteOnly。此时属性定义语句的格式: 访问修饰符 WriteOnly Property 属性名(形式参数表) As 数据类型 Set = End Set End Property 若省略Set过程,则该属性定义为只读属性。,例6-3,编写程序:先定义圆类Circle,它包括一个表示半径的数据成员r、与数据成员r关联的属性x和求圆面积的方法。
19、然后测试该类定义的正确性。,Imports System.Console Module Module1 Public Class Circle Private r As Single Public Property x() As Single Get Return r End Get Set(ByVal V As Single) r = V End Set End Property Public Function Area() As Single Return 3.14159 * r * r End Function End Class,Sub Main() Dim C As New Circ
20、le Write(半径=) C.x = Val(ReadLine() Write(面积=) WriteLine(0, C.Area) End Sub End Module,WriteLine(“r=0 Area=1”, C.x, C.Area),运行程序,6.2.4 事件的定义及其触发,1事件的定义,在用户定义的类中可以定义一些事件,用于当事件触发时驱动(执行)相应的事件过程。 定义事件语句的一般格式: Event () 说明: 访问修饰符为关键字Private、Protected、Public和Friend等,用于指定事件不同的访问范围。 是事件中用来传递数据的参数。如果没有形式参数,则触发
21、事件调用事件过程时,不用进行数据的传递。,2事件处理函数(事件过程),在定义事件之后,还需要定义一个事件处理函数,以便完成 当触发事件后要做的工作。 事件处理函数语法格式: Private | Public Sub ( ) _ Handles . End Sub 其中与可以相同,也可以不同。 由一系列语句组成,这些语句用来完成事件要做的工作。,3事件的触发,事件定义后,必须被触发才会转去执行相应的事件过程。 触发事件语句的一般格式: RaiseEvent ( ) 中的参数一般为常数、常量、变量和数组等,也可以为表达式。 它们必须在数目、类型和排列次序与相应事件过程定义的中的参数一致。 事件过程
22、的执行过程与一般过程的执行过程一致。 若触发事件调用的事件过程有参数,VB系统首先进行参数传送,然后执行事件过程体中的语句。 过程体执行结束之后,返回调用该事件过程语句的下一个语句去执行。 若事件过程没有参数,VB系统直接执行事件过程体中的语句,执行之后就返回调用子过程语句的下一个语句。,4能够触发事件对象的定义,用一般方法定义的对象是不能触发事件的,只有用关键字WithEvents定义的对象才能触发事件。 用关键字WithEvents定义事件对象语句的语法格式: Dim|Private|Public WithEvents As New 功能: 定义一个能够触发事件的对象。,例6-4,首先定义
23、学生类Student,它包括3个数据成员No、Name和Score,分别表示学号、姓名和分数,也包括分别与数据成员No、Name和Score关联的属性X、Y和Z,还包括两个事件Pass和NoPass,然后编写程序测试该类定义的正确性。,Imports System.Console Module Module1 Public Class Student 说明Student类 Private No As String Private Name As String Private Score As Integer Public Property X() As String Get Return No
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Visual Basic.NET程序设计课件 第6章 面向对象程序设计基础 Basic NET 程序设计 课件 面向 对象 基础
限制150内