1 / 49

第 五章 Visual Basic.NET 面向对象语言基础

第 五章 Visual Basic.NET 面向对象语言基础. 本章学习目标. 了解面向对象程序设计方法的基本原理及主要特点 —— 抽象性、封装性、继承性、多态性。掌握类和对象的概念以及如何用类来解决具体问题并在类的基础上如何派生出新类,以及重载的概念和作用。. 本章学习要点. Visual Basic.NET 语言的新特性和变化。 封装、继承、多态性的概念和使用方法。 类和对象的概念、定义方法及对象的构造。 继承和重载的概念及应用。 接口的概念及用法。. 5 .1 面向对象的思想.

aiko-perez
Download Presentation

第 五章 Visual Basic.NET 面向对象语言基础

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第 五章 Visual Basic.NET面向对象语言基础

  2. 本章学习目标 了解面向对象程序设计方法的基本原理及主要特点——抽象性、封装性、继承性、多态性。掌握类和对象的概念以及如何用类来解决具体问题并在类的基础上如何派生出新类,以及重载的概念和作用。

  3. 本章学习要点 • Visual Basic.NET语言的新特性和变化。 • 封装、继承、多态性的概念和使用方法。 • 类和对象的概念、定义方法及对象的构造。 • 继承和重载的概念及应用。 • 接口的概念及用法。

  4. 5.1 面向对象的思想 面向对象的方法将数据与对数据的操作方法放在一起,作为一个相互依存、不可分离的整体——对象。对同类型对象抽象出共性,形成类。类的大多数数据,只能用本类的方法进行处理。类通过一个简单的外部接口与外界发生关系,对象与对象之间通过消息进行通信。每个对象都有各自的内部属性和操作方法,整个程序由一系列相互作用的对象构成。

  5. 5.2 面向对象程序设计的特点 面向对象的程序设计方法是一种系统化的程序设计方法,它允许抽象化、模块化的分层结构,具有多态性、继承性和封装性。 抽象性与封装性 继承性 多态性

  6. 5.2.1 抽象性与封装性 面向对象方法中的抽象是指对具体问题进行概括,抽出一类对象的公共性质并加以描述的过程。抽象的过程,就是对问题进行分析和认识的过程。

  7. 5.2.2 继承性 继承性是指一个新类可以从已有类派生,这个过程称类的继承。新类继承了已有类的特征,称原来类的派生类,也叫做子类,已有类叫做基类或父类。

  8. 5.2.3 多态性 多态性是指一般类中定义的属性或行为,被特殊类继承之后,可以具有不同的数据类型或表现出不同的行为。多态性支持“同一接口,多种方法”,使高层代码只能写一次而在低层可多次复用。 例如,“调制解调器”类是“电话”类的派生类。“电话”类可以有“拨号”方法,“调制解调器”类也可以有“拨号”方法。但该方法的实现方式可以完全不同。

  9. 5.3 类和对象 将数据及对数据的操作法封装在一起,作为一个相互依存,不可分离的整体——对象。 对同类型对象抽象出其共性形成类。

  10. 对象 • 客观世界中的:是现实世界中的一个实际 存在 的事物(如:人、车、一项计划)。 特点:有静态特性 有动态特性(例:学生) • 计算机中的:是系统中用来描述客观事物的一个实体,它是用来构成系统的一个基本单位。对象由一组属性和一组行为构成。 属性:描述对象静态特征的数据项。 行为:描述对象动态特征的数据项。

  11. • 类:具有相同属性和行为的一组对象的集合。 为属于该类的全部对象提供了抽象的描 述,包括属性和行为两个部分。 类与对象的关系: 集合——成员 抽象描述 ——具体实例

  12. 5.3.1 属性 Visual Basic.NET的对象都有许多属性,它们是用来描述和反映对象特征的参数,对象中的数据就保存在属性中。 按钮的常用属性

  13. 5.3.2 方法 对象的属性实际上是对象的数据,而对象本身就是对这些数据及其操作进行封装的结果,对象本身包含的函数或过程叫做方法。         列表框的常用方法

  14. 对象调用方法的语法格式为: 对象名.方法 [ 参数 ] 例如: 列表框名.clear 列表框名.Items.Add(“新的表项名”)

  15. 5.3.3事件及事件过程 对于对象而言,事件就是发生在该对象上的消息。可以把事件看做是一个响应对象行为的动作。 文本框的常用事件

  16. 5.4 面向对象编程的实现 Visual Basic.NET是一种真正意义上的面向对象语言,它将编程人员带入了一个全新的编程方式中,即真正的面向对象编程技术,它是一种用对象分析、设计并编写应用程序的方法。

  17. 5.4.1 类的创建 要实现面向对象的编程,必须首先定义类。在Visual Basic.NET中,使用Class语句定义一个类,同时定义这个类的属性、事件和方法等。

  18. 项目中增加空类的方法: 在VB.NET中增加一个类,需要先创建一个新的Windows应用程序项目,步骤如下: (1)打开VB.NET集成开发环境,出现起始页。 (2)单击“新建项目”,打开新的项目窗口,选择“VB项目”类型,“空项目”模板,输入项目名称,然后确定。 (3)选择“项目”|“添加类”菜单命令,弹出“添加新项”对话框,在“模板”中选择“类”,在“名称”框中输入类的名称“ClassName”,单击“打开”按钮,出现一个空类。 项目中添加了一个新文件,它包含了以下代码: Public Class Class_Name End Class

  19. 1、Class关键字    在.vb文件中可以包含多个类、模块以及其他代码。在VB.NET中创建类的时候,只要在Class和End Class之间就可以添加与该类有关的代码。 Public Class Class_Name End Class

  20. 2、用Property语句创建属性   类的属性描述了对象的具体特征。在Visual Basic.NET中,类中的属性需要用Property语句来创建,属性可以有返回值,也可以赋值,所以,创建属性的关键在于如何实现返回值和赋值,由Get语句和Set语句实现。 • Property语句的格式为: • Property 属性名([参数表]) [As 类型名1] • Get • <语句块> • End Get • Set (ByVal Value As 类型名) • <语句块> • End Set • End Property

  21. 创建属性的例题: Public class myclass Public x As Integer Private y As Integer = 0 Public Property y() As Integer Get Return y End Get Set(ByVal value As Integer) If value <= 50 Then y = value End Set End Property End Class

  22. 3、创建方法 在VB.NET中,类中方法的创建是使用Sub和Function关键字: Sub mywork( ) …… End Sub Function myage( ) as integer …… End Function Sub和Function的区别是,用Sub来创建一个方法它不返回数值;若是用Function来创建一个方法,它将返回一个数值作为结果。

  23. 作用域关键字包括以下几个: • Private:私有属性,表明只能调用类中的代码。 • Friend:友元属性,表明可以在项目/控件中调用代码。 • Public:公共属性,表明可以在类外部调用代码。 • Protected:保护属性,表明改类的派生类可调用代码。

  24. 【例5-1】 建立一个“学生”类,代码如下: • Public Class student • Dim score As Decimal = 85 • Public Sub show() • System.Console.WriteLine("学生成绩为:" & score) • End Sub • End Class • Public Class test • Shared Sub main() • Dim student1 As student • student1 = New student • student1.show() • End Sub • End Class

  25. 5.4.2 对象的声明和取消    在面向对象的编程中,实际操作的是类中的具体实例——对象,类只是一个模板。因此创建一个对象的过程又被称为实例化。    定义好类以后可以通过New关键字创建类的实例,即类的对象。 1. NEW语句 Visual Basic.NET使用NEW语句创建对象,程序员可以在任何地方使用NEW 代码。例如:创建一个myclass类型的对象,代码如下: Dim theclass as myclass Theclass=new myclass 上面的语句可以简化为下面的语句: Dim theclass as new myclass

  26. 2.取消对象    要销毁一个对象,也就是释放与这个对象有关的资源,只需要给该对象变量赋值Nothing即可。代码如下: Dim theclass as myclass Theclass=new myclass ‘在此对象实例化和初始化 Theclass=nothing ‘销毁theclass对象

  27. 【例5-2】定义一个clock(时钟)类。通过这个类我们可以知道时钟的一些信息:时钟由时、分、秒三个整数来实现。所有这些都是时钟对象的属性,是对象性质的信息描述。另外,时钟还有显示时间等行为,这就是对它的方法,例如:ShowTime(显示时间)。【例5-2】定义一个clock(时钟)类。通过这个类我们可以知道时钟的一些信息:时钟由时、分、秒三个整数来实现。所有这些都是时钟对象的属性,是对象性质的信息描述。另外,时钟还有显示时间等行为,这就是对它的方法,例如:ShowTime(显示时间)。

  28. Public Property seconds() As Integer Get Return s End Get Set(ByVal value As Integer) s = value End Set End Property Public Sub ShowTime() Console.WriteLine("设置时间为" & hours & ":" & minutes & ":" & seconds) End Sub End Class • Public Class clock • Private h As Integer • Private m As Integer • Private s As Integer • Public Property hours() As Integer • Get • Return h • End Get • Set(ByVal value As Integer) • h = value • End Set • End Property • Public Property minutes() As Integer • Get • Return m • End Get • Set(ByVal value As Integer) • m = value • End Set • End Property Module Module1 Sub main() Dim time1 As New clock() time1.hours = 10 time1.minutes = 28 time1.seconds = 59 time1.ShowTime() End Sub End Module

  29. 5.4.3 对象的生命周期 VB.NET中的对象有生存周期。定义一个对象的生存周期只需要一个New事件,这个New事件是在对象中其他代码之前运行的,并且在对象被创建时被调用。    在VB.NET中,类似普通变量的初始化,类实例化时也可以初始化,称为对象的初始化,即给它的数据成员赋初值。对象初始化时,由一个特殊的成员函数完成,这个函数称为构造函数。对象的构造函数是在创建一个类的新实例的时候被调用的,程序中不能执行直接调用。构造函数的名称只能用New,并且不能指定函数类型,构造函数可以重载,即可以定义参数个数不同或参数类型不同的多个构造函数。

  30. 构造函数的格式如下: Public Sub New( ……) End Sub    若类中没有定义任何形式的构造函数,系统会自动生成默认的构造函数,即空构造函数。如下: Public Sub New( ) End Sub

  31. 1、对象的构造    对象构造是在使用New关键字创建类的新实例对象时被触发的。 Public class theclass Public sub new()       ‘在这里初始化对象 End sub End class    利用这种类型的构造函数,就可以创建类的一个实例对象: Dim obj as new theclass()

  32. 可以采用两种方式实现构造函数:一是通过使用optional关键字来声明一个可选参数,二是通过重载new方法. (1)使用optional关键字,只需把参数声明为可选即可,形式如下: Public sub new(optional byval id as integer=-1) If id=-1 then ‘在这里初始化对象 Else ‘用id值来初始化对象 End if End sub (2)使用一个new方法,通过重载来实现的,形式如下: Public overloads sub new ‘在这里初始化对象 End sub Public overloads sub new(byval id as integer) ‘用id值初始化对象 End sub

  33. Module Module1 Sub main() Dim time1 As New clock() time1.ShowTime() Dim time2 As New clock(10, 28, 59) time2.ShowTime() End Sub • Public Class clock • Private h As Integer • Private m As Integer • Private s As Integer • Public Sub New() • h = 12 • m = 12 • s = 12 • End Sub • Public Sub New(ByVal h1 As Integer, ByVal m1 As Integer, ByVal s1 As Integer) • h = h1 • m = m1 • s = s1 • End Sub • Public Sub ShowTime() • Debug.WriteLine("设置时间为" & h & ":" & m & ":" & s) • End Sub • End Class

  34. 2、对象的中止 • VB.NET是使用一个名为“垃圾收集”机制来中止对象的。 • 垃圾收集的主要优点是它避免了由引用计数带来的循环引用问题。如果两个对象相互引用,且每个对象都没有任何其他引用它们的代码,垃圾收集程序会发现它们并将它们中止。还有对象的中止处理过程是在应用程序空闲时执行的,减少了对用户的影响。

  35. 5.4.4 共享类成员 • 1、共享方法 • 2、共享数据 • 3、全局变量

  36. 1、共享方法    在VB.NET中,一个类不仅可以拥有所有正常的方法和属性,而且还可以拥有一些不需要创建类的实例的方法,这些方法就是共享方法。 Public Class Math Shared Function Add(ByVal a As Integer, ByVal b As Integer) As Integer Return a + b End Function End Class 可以不用实例化一个Math对象就可以访问,代码如下 Dim result As Integer result = Math.Add (5,10)

  37. 共享方法不仅可以通过常用的方法来访问,而且可以在不需要创建一个对象的条件下提供访问的功能。实际上,当一个共享方法被调用的时候,没有任何对象被创建,它就像在模块中的一个程序,可以被直接调用。共享方法不仅可以通过常用的方法来访问,而且可以在不需要创建一个对象的条件下提供访问的功能。实际上,当一个共享方法被调用的时候,没有任何对象被创建,它就像在模块中的一个程序,可以被直接调用。 • 共享方法和其他常用的方法一样,也可以被重载,所以可以利用相同的共享方法来创建一系列变化的方法,每一种方法有不同的参数列表。

  38. 2、共享数据    如果类的所有实例需要共享一个数值,或者每个特定类型的对象要共享相同的变量,这些时候都可以通过使用共享变量来实现目的。共享变量可以使用Shared关键字来声明。 例如: Public class mycounter Private shared mintcount as integer End class 注意:在默认状态下,共享方法的作用域是public,共享变量的作用域是private。

  39. 例: Public class mycounter Private shared mintcount as integer Public sub new() Mintcount+=1 End sub Public readyonly property count() as integer Get Return mintcount End get End property End class

  40. 3、全局变量    对于共享变量另外一个用法是提供全局变量的类型。给定一个Public作用域共享变量。 例: Public Class TheClass Public Shared a As Integer End Class

  41. 5.5 类的继承 Visual Basic.NET支持类的继承,允许用户定义一个类,作为其他类继承的依据,继承类能够继承,扩充基本类的属性和方法,继承类也可以重载基本类的一些方法,所有在Visual Basic.NET建立的类缺省的属性都是可继承的,其中已有类叫做基类(父类),继承的新类叫做派生类(子类)。 1、实现基本的继承 2、禁止继承 3、基类成员在派生类中的作用域

  42. 1、实现基本的继承 【例3-3】建立person类及它的派生类employee类。 Public Class person Public sname, Iage, ssex Public Property name() As String Get Return sname End Get Set(ByVal value As String) sname = value End Set End Property Public Property age() As Integer Get Return Iage End Get Set(ByVal value As Integer) Iage = value End Set End Property Public Property sex() As String Get Return ssex End Get Set(ByVal value As String) ssex = value End Set End Property End Class

  43. Module Module1 Sub Main() Dim aemployee As New employee() aemployee.name = "王强" aemployee.sex = "男" aemployee.age = 25 aemployee.salary = 3600.0 aemployee.Displayemployee() End Sub End Module Public Class employee Inherits person Dim Ssalary As Single Public Property salary() As Single Get Return Ssalary End Get Set(ByVal value As Single) Ssalary = value End Set End Property Sub Displayemployee() Debug.WriteLine("雇员的姓名:" & name) Debug.WriteLine("雇员的性别:" & sex) Debug.WriteLine("雇员的年龄:" & age) Debug.WriteLine("雇员的薪水:" & salary) End Sub End Class

  44. 2、禁止继承    在默认状态下,创建的任何类都是可以用作基类,可由这个基类创建其他的类。但有时需要创建一个不被继承的类,这时可以在类的声明中使用NotInheritable关键字。 Public NotInheritable Class Class_name End Class

  45. 3、基类成员在派生类中的作用域    通过继承性创建子类时,新类将从父类获得所有Public 和 Friend方法、属性及变量。但在父类中声明的Private的任何内容都不能直接应用于新子类的代码中。

  46. Module Module1 Sub Main() Dim aemployee As New employee() aemployee.setperson("王强", 25, "男", 3600.0) aemployee.Displayemployee() End Sub End Module Public Class employee Inherits person Dim Ssalary As Single Public Property salary() As Single Get Return Ssalary End Get Set(ByVal value As Single) Ssalary = value End Set End Property Sub setperson(ByVal n As String, ByVal a As Integer, ByVal s As String, ByVal c As Single) name = n age = a sex = s salary = c End Sub Sub Displayemployee() Debug.WriteLine("雇员的姓名:" & name) Debug.WriteLine("雇员的性别:" & sex) Debug.WriteLine("雇员的年龄:" & age) Debug.WriteLine("雇员的薪水:" & salary) End Sub End Class

  47. 5.6 重载 VB.NET具有重载方法的功能,可以利用重载来实现多态性。重载是可以在一个类中可多次声明相同名称的一种方法,只要每个声明都有不同的参数列表即可。其中参数列表不同指的是参数的数据类型不同或参数的个数不同。

  48. Public Class sum Public Function add(ByVal a As Integer, ByVal b As Integer) As Integer Return a + b End Function Public Function add(ByVal a As Double, ByVal b As Double) As Double Return a + b End Function End Class Module Module1 Sub main() Dim NO1, NO2 As New sum Debug.WriteLine(NO1.add(5, 6)) Debug.WriteLine(NO2.add(2.5, 3.6)) End Sub End Module

  49. 5.7多继承——接口    多继承由多个基类继承所以为编程带来一定的复杂性,但可以通过接口来解决此问题。和类一样接口也定义了一系列属性、方法和事件。但与类不同的是,接口并不提供实现,它们由类来实现,并从类中被定义为单独的实体。

More Related