第9章 面向对象程序设计.ppt_第1页
第9章 面向对象程序设计.ppt_第2页
第9章 面向对象程序设计.ppt_第3页
第9章 面向对象程序设计.ppt_第4页
第9章 面向对象程序设计.ppt_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第9章 面向对象程序设计,9.1 面向对象在VB 2005中的实现,9.1.1 类与对象 类是对具有相同属性和相同行为的一组相似对象的集合。类是用来创建对象的模板,它为属于该类的全部对象提供了统一的抽象描述,其内部包含状态描述和方法定义,而对象只是类的一个具体实例。 类本身没有属性值,也不能执行类方法,对类事件也不会做出任何响应。类定义了属性并包含了将被该类创建的每个对象所使用的方法的实现过程,这些对象将具有属性值并执行相应的方法。例如,在VB 2005中,工具箱上的控件表示类。当将控件工具箱拖放到窗体上时,实际上是在创建一个对象,即类的实例。 类通过设定该类中每个对象都具有的属性和方法来提供

2、对象的定义,该属性和方法称为类的接口。,9.1.2 New子句,1. 创建对象实例的语法格式 使用New子句可以创建一个新的对象实例,其语法格式如下: Dim | Public | Friend | Private | Shared | Static | Protected 变量名 As New 控件名称,2. 创建控件类举例 在窗体的Load事件中,创建一个Label类对象lbl,一个TextBox类对象txt。代码如下: Dim lbl As New Label Dim txt As New TextBox 设置这两个对象的属性,代码如下: With lbl .Text = 当前日期: .

3、Font = New Font(楷体, 15) 设置字体也使用New子句,即生成新的Font类 .Width = 100 .Height = 30 .ForeColor = Color.Blue End With With txt .Text = Today .Font = New Font(楷体, 10) 设置字体也使用New子句,即生成新的Font类 .ForeColor = Color.Green .Focus() End With,在程序运行时,生成的控件对象最终需要在窗体上显示,即最终还是要将生成的控件对象添加到窗体上。代码如下: lbl.Location = New Point(5

4、0, 50) 新控件在窗体指定位置显示,即设置Location属性 txt.Location = New Point(150, 50) 指定位置使用Point对象数组 Me.Controls.Add(lbl) 向窗体添加对象调用Controls属性的Add方法 Me.Controls.Add(txt) 向窗体添加对象,3. 创建数据类型类实例 除了控件类之外,系统还提供了许多类,如每种数据类型就是一个类。例如: Dim a As New Integer Dim b As Integer=20 a = 10 说明: (1)使用New子句声明变量,表示运行Dim语句时创建该类的一个新实例,但在创建

5、时不能被计算或赋予该变量的表达式。 (2)不使用New子句声明变量,表示运行Dim语句时创建该类的一个变量,可以在创建时被计算或赋予该变量的表达式。 (3)数组也是一个类,例如: Dim arr As Integer() arr = New Integer() 0, 1, 2, 3,9.1.3 定义和添加类,1. 定义类 在VB 2005中,程序员可以自己定义类。类的实现包括两部分内容:类的说明和类的主体。其语法格式如下: 类说明修饰符 Class 类名 类主体 End Class,【例9-1】声明一个类名是Student的类。 Public Class Student Public Name

6、 As String Public Sex As String Public Birthday As Date End Class 说明:这段代码声明了一个简单的类,它包含姓名、性别和出生日期三个成员变量,而没有任何方法和事件。,2. 添加类 VB 2005中的类是一个代码块,可出现在3个位置中: (1)放在窗体和模块文件中。在Windows窗体文件、Web窗体文件、模块文件中都可以定义类; (2)放在项目内的单独文件中。方法是:建立一个项目后,执行“项目”菜单“添加类”命令,会打开“添加新项”对话框,在“模板”窗口中选择“类”,并在“名称”栏内输入要建立的类文件名,然后单击“添加”按钮。 (

7、3)放在单独的项目中。当要建立的类比较多时,可以把相关的类放在一个“类库”项目中。,9.1.4 创建成员属性,1. 成员变量 成员变量和程序的一般变量一样,需要先声明。对于成员变量,主要通过以下几个关键字来控制变量的作用域: Private:仅适用于声明它的类中的代码。 Friend:仅适用于声明它的工程和组件中的代码。 Protected:仅适用于继承于类的类。 Public:适用于类外的代码,具有最大的开放性。,2. 成员函数 可以创建成员的属性。其语法格式如下: 访问权限 Property 成员名称 As 成员类型 Get Return 私有成员属性值 End Get Set 私有成员属

8、性=值 End Set End Property,【例9-2】给Student类创建StudentID属性。 Public Class Student Private Name As String Private Sex As String Public Property StudentID() As String Get Return Name End Get Set(ByVal Value As String) Name = Value End Set End Property Public Birthday As Date End Class,类只是模板,在具体调用的时候还必须实例化为对

9、象才可以。如果需要调用Student类中StudentID属性,需要先创建一个Student类的对象,然后就像操作控件对象的属性一样操作StudentID属性。代码如下: Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles MyBase.Load Dim MyStudent As New Student MyStudent.StudentID = 200801001 Dim lbl As New Label lbl.Text = MyStudent.Studen

10、tID lbl.Location = New Point(40, 45) Me.Controls.Add(lbl) End Sub,9.1.5 创建成员方法,方法是对象执行的动作,是在类中编码的子过程或函数。它可以利用自身的数据,处理生成输出结果或者执行服务程序的信息。 可以使用Sub和Function关键字来实现方法。其语法格式如下: 访问权限方法类型方法名( 成员列表 ) End 方法类型,【例9-3】在【例9-2】创建的Student类中创建方法。 Public Function GetDate() Return Birthday End Function 说明:Function方法返回

11、出生日期值。 调用Student类的方法,就像调用控件对象的方法一样操作。代码: Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles MyBase.Load Dim MyStudent As New Student Dim lbl As New Label MyStudent.Birthday = #7/30/1989# lbl.Text = MyStudent.GetDate lbl.Location = New Point(40, 45) Me.Contro

12、ls.Add(lbl) End Sub,9.1.6 创建成员事件,1. 创建事件 在类中可以创建事件,其语法格式如下: 访问权限 Event 事件名称(参数列表) public Sub 方法名称 RaiseEvent 事件名称 End Sub,【例9-4】给Student类创建事件,并引发事件。 Public Event DataError(ByVal ErrMsg As String) Public Sub AddBirthday(ByVal d As Date) If (d = #1/1/1980#) And (d = Today) Then Birthday = d Else Raise

13、Event DataError(出生日期错误,超出学生年龄范围!) End If End Sub,2. 事件源 引发事件的对象称为事件源。为了确定引发事件的事件源,必须用WithEvents关键字声明对象,即在要调用该事件的项目中使用WithEvents声明对象,声明的位置应该在所有的过程的前面。声明格式为: Private WithEvents 对象名 As New 类名,【例9-5】声明一个能够引发事件的Student对象Stu,代码如下: Private WithEvents Stu As New Student 编写命令按钮的Click事件代码: Private Sub Button1

14、_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles Button1.Click Dim a As Date a = #8/8/2010# MyStudent.AddBirthday(a) End Sub 然后在代码窗口中的对象下拉列表框中选择Stu,在事件下拉列表框中选择DataError事件,编写如下代码: Private Sub Stu_DataError(ByVal ErrMsg As String) Handles Stu.DataError MsgBox(ErrMsg, MsgBox

15、Style.Exclamation, Error) End Sub,9.1.7 共享方法和共享成员,1. 共享成员 当类的所有实例需要共享一个数值时,可以使用共享成员来实现。共享成员实际就是类中定义的一个属性。 共享成员和共享方法一样,都用Shared来定义。共享成员的默认访问权限是Private。,【例9-6】创建学生Student类,类中声明一个共享成员来保存当前学生数。 设计步骤如下: (1)创建Student类: Public Class Student Private Shared StudentNum As Integer Public Sub New() StudentNum +

16、= 1 End Sub Public ReadOnly Property Num() As Integer Get Return StudentNum End Get End Property End Class,(2)在窗体中添加一个按钮,代码如下: Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim Student1 As Student Student1 = New Student MsgBox(Student1.Nu

17、m) End Sub (3)运行程序。每单击一次按钮,就会自动创建类的一个实例,计数器会自动加1。,2. 共享方法 在VB 2005中,一个类不仅可以拥有所有常规的方法和属性,还可以拥有一些不需要创建类的实例方法,这些方法就是共享方法。 一个共享方法不必像通常那样通过创建对象实例来访问,而可以直接从类中访问。,【例9-7】创建一个Item类,类中声明一个共享成员和一个共享方法。 (1)创建Item类: Public Class Item Public Shared Count As Integer = 1 Public Shared Sub ShareMethod() MsgBox(Curre

18、nt value of Count: & Count) End Sub Public Sub New(ByVal Name As String) Me.SerialNumber = Count Me.Name = Name Count += 1 End Sub Public SerialNumber As Integer Public Name As String Public Sub InstanceMethod() MsgBox(Information in the first object: & Me.SerialNumber & vbTab & Me.Name) End Sub End

19、 Class,(2)创建两个Item对象,也可以不用实例化一个Item对象,来访问共享成员和方法: Dim part1 As New Item(keyboard) Dim part2 As New Item(monitor) part1.InstanceMethod() part2.InstanceMethod() Item.ShareMethod() 说明: (1)这里没有使用对象变量来引用方法,也可以直接使用类名来引用方法。对于非共享的方法,这里会产生一个语法错误。而对于共享方法,这样是可以的。 (2)共享方法和一般方法一样,可以被重载。 (3)共享方法的默认访问权限是Public,也可以

20、设置为Friend、Protected或Private。,9.1.8 在应用程序中使用类,【例9-8】设计一个学生类,包含姓名、年龄、专业、入学日期等属性,增加年龄及显示信息等方法,以及数据错误等事件,最后进行简单测试。 设计步骤如下: (1)在Windows应用程序项目中,选择“项目”菜单“添加类”,进入“添加新项”对话框,如图所示,选中“类”并输入类的名称后,单击“添加”按钮,即可向项目中添加一个类。,(2)创建cStudent类。 (3)在窗体上添加两个标签控件、两个文本框控件和一个按钮控件,设计如图左所示的用户界面进行测试。,编写“测试”按钮的Click事件代码: Dim WithEv

21、ents student1 As Student Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click student1 = New Student student1.StudentName = 李华 student1.StudentAge = 18 TextBox1.Text = student1.StudentName TextBox2.Text = student1.StudentAge student1.AddAge(5)

22、 End Sub 编写对象的DataError事件代码: Private Sub stu1_DataError(ByVal ErrMsg As String) Handles student1.DataError MsgBox(ErrMsg, MsgBoxStyle.Exclamation, Error) End Sub,9.2 类的继承和多态,9.2.1 类的继承,1. 基本继承 继承的最大好处就是可以实现代码重复使用。子类从父类中继承各种特征,只要在子类中添加自己的特性代码就可以形成新的类。 基本继承的语法格式为: Public Class 类名 Inherits 父类名 End Clas

23、s,【例9-9】使用继承。创建一个Person类(父类),它包含了所有的共用代码。然后再创建Student子类,这个类是由Person类继承而来的。 设计步骤如下: (1)定义一个Person类,包含姓名、年龄属性。代码如下: Public Class Person Public PersonName, PersonAge Public Property Name() As String Get Return PersonName End Get Set(ByVal Value As String) PersonName = Value End Set End Property Public

24、Property Age() As Integer Get Return PersonAge End Get Set(ByVal Value As Integer) PersonAge = Value End Set End Property End Class,(2)定义一个Student类,除了具有姓名、年龄属性外,还具有性别属性及一个用于显示信息的方法,代码如下: Public Class Student Inherits Person Public StudentSex Public Property Sex() As String Get Return StudentSex End

25、Get Set(ByVal Value As String) StudentSex = Value End Set End Property Sub DisplayStudent() MsgBox(姓名: & Name & Space(4) & 年龄: & Age & Space(4) & 性别: & Sex) End Sub End Class,(3)编写窗体中命令按钮的Click事件代码: Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Butto

26、n1.Click Dim MyStudent As New Student MyStudent.Name = 丁一 MyStudent.Age = 18 MyStudent.Sex = 女 MyStudent.DisplayStudent() End Sub (4)运行程序。单击命令按钮,会出现一个信息对话框,显示该学生信息。,2. 限制继承 默认状态下,创建的任何类都可以用做基类。但有时需要创建一个不能被继承的类,这时可以在类的声明中使用NotInheritable关键字: Public NotInheritable Class 基类名 End Classs 使用NotInheritable

27、关键字后,其他代码不能再使用Inherits创建由这个基类继承的子类。,3. 可视化继承 VB 2005的继承特性不仅局限于代码方式的继承,而且支持可视化继承,即当用户用Windows窗体和控件等创建一个新的窗体时,通过继承,可以得到与这个窗体具有相同布局、控件和行为的窗体,也可以通过可视化继承创建自己的控件。 在VB 2005中,窗体是一个类而不是一个实例,用户编写的Windows应用程序,是通过不断向类中添加对象、属性、方法和事件等完成的。向Windows应用程序中添加一个继承的窗体和添加一个新的窗体是没有区别,方法是:单击 “文件”菜单“添加新项”,进入“添加新项”对话框,选中“Wind

28、ows窗体”项,单击“添加”按钮,就向Windows应用程序添加一个继承的窗体。,9.2.2 类的多态,多态性是指当两个或两个以上的类具有相似的属性或方法时,编译程序能自动根据这些属性和方法找到相应的对象。 多态性常与继承有关,即多态性常常伴随着对类的继承及重载而存在。此外,多态性还可以存在于独立的类中,即不相干的类之间也可以利用多态性来实现对一些接口的共享。 程序重复定义的概念创造了多态性的对象。程序重复定义的方法是:子类重复定义父类的程序。由于父类、子类的继承关系,子类是父类的一种,所以父类和子类的大部分功能是相似的,但还有一定的差别,也就是父类和子类的对象有不同的行为。,例如,在【例9-

29、9】中,声明了一个Person(人)类和一个它的子类Student(学生)类,现在又声明一个Person类的子类Teacher(教师)类 。 在这个类的体系中共有3个类,每个类都有Age方法,其中Teacher类和Student类的Age方法是继承Person类的。由于方法是对象的行为,它们属于不同的对象,因而会有不同的行为,因为Teacher类和Student类的Age方法的取值范围不一样(一般老师的年龄比学生的大)。在同一类别体系中的对象为同一种,但行为不同,这些对象就称为多态性对象,而像Age这样的方法称为多态性方法。,9.3 接口与模块,在VB 2005中,一个子类只可以继承一个直接父

30、类,这被称为单一继承。使用单一继承虽然使各个类之间的层次关系清楚、可读性强,但在处理一些复杂问题时,则会显得功能不够强大。因此,VB 2005提供了接口功能,来实现多重继承。 9.3.1 接口 接口是用来组织类内容的一种程序结构,一个类可以有多个接口。 接口虽然定义了与类相似的成员,但是接口并不提供成员实现,这些成员由类来实现,并在类中定义为单独的实体。因此,接口允许类的定义与实现分开,是一种功能强大的编程工具。,1. 定义接口 要实现接口,首先要定义接口,其语法格式如下: 访问权限 Interface 接口名 Inherits 接口名 访问修饰符 Property 成员名 访问修饰符 Fun

31、ction 成员名 访问修饰符 Sub 成员名 访问修饰符 Event 成员名 访问修饰符 Interface 成员名 访问修饰符 Class 成员名 访问修饰符 Structure 成员名 End Interface,2添加接口 在Windows应用程序项目中,选择“项目”菜单“添加新项”,或右键单击项目选择快捷菜单“添加”“新建项”,进入“添加新项”对话框,如图,在“模板”中选中“接口”,在“名称”中输入一个接口名称,单击“添加”按钮,即可向项目中添加一个接口。,【例9-10】定义一个接口,代码如下: Public Interface thisInterface Property this

32、Prop(ByVal thisStr As String) As Char Function thisFunc(ByVal thisInt As Integer) As Integer End Interface,3接口与类 接口表示一种约定,实现接口的类必须严格按照其定义来实现接口的每个成员。当应用程序通过该类创建实例时,对象将会存在并在内存中运行。 注意:如果将类实例赋予某个变量,则此实例的成员的访问级别可能取决于该变量的数据类型是基础接口还是实现类。,【例9-11】定义一个接口,并使用接口,代码如下: Public Interface IDemo Sub doSomething() End Interface Public Class implementIDemo Implements IDemo Private Sub doSomething() Implements IDemo.doSomething MsgBox(doSomething!) End Sub End Class 在窗体上添加一个Button按钮,编写该控件对象的Click事件代码: Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.Ev

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论