• 面向对象语言的特点 > 教学目标:了解面向对象程序设计方法的基本原理及主要特点——抽象...
  • 教学目标:了解面向对象程序设计方法的基本原理及主要特点——抽象...

    免费下载 下载该文档 文档格式:DOC   更新时间:2012-04-17   下载次数:0   点击次数:1
    教学目标:了解面向对象程序设计方法的基本原理及主要特点——抽象性、封装性、继承性、多态性.掌握类和对象的概念以及如何用类来解决具体问题并在类的基础上如何派生出新类,以及重载的概念和作用..
    教学类型:在多媒体教室直观讲授,引导学生进行类的操作.
    教学内容:
    复习上节内容
    5.4 面向对象编程的实现
    Visual Basic.NET是一种真正意义上的面向对象语言,即真正的面向对象编程技术,它是一种用对象分析、设计并编写应用程序的方法.
    5.4.1 类的创建
    要实现面向对象的编程,必须首先定义类.在Visual Basic.NET中,使用Class语句定义一个类,同时定义这个类的属性、事件和方法等.
    下面先来看如何在项目中增加一个空类.
    在VB.NET中增加一个类,需要先创建一个新的Windows应用程序项目,步骤如下:
    打开VB.NET集成开发环境,出现起始页.
    单击"新建项目",打开新的项目窗口,选择"VB项目"类型,"空项目"模板,输入项目名称,然后确定.
    选择"项目"|"添加类"菜单命令,弹出"添加新项"对话框,在"模板"中选择"类",在"名称"框中输入类的名称"ClassName",单击"打开"按钮,出现一个空类.
    项目中添加了一个新文件,它包含了以下代码:
    例如:
    Public Class Class_Name //Class是定义类的关键字
    ……
    End Class
    1、用Property语句创建属性
    类的属性描述了对象的具体特征.在Visual Basic.NET中,类中的属性需要用Property语句来创建,属性可以有返回值,也可以赋值,所以,创建属性的关键在于如何实现返回值和赋值,由Get语句和Set语句实现.Property语句的格式为:
    Property 属性名([参数表]) [As 类型名1]
    Get
    <语句块>
    End Get
    Set (ByVal Value As 类型名)
    <语句块>
    End Set
    End Property
    例如,如下属性和属性过程的声明:
    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
    对属性y来说,只接受小于等于50的整数.声明了属性之后,可以这样使用:
    ……
    Dim test as new myclass( )
    Test.y=30
    ……
    这样,属性y的值将为30,如果执行如下赋值操作:
    Test.y=140
    则不会改变属性y的值.
    2、创建方法
    在VB.NET中,类中方法的创建是使用Sub和Function关键字:
    Sub mywork( )
    ……
    End Sub
    Function myage( ) as integer
    ……
    End Function
    Sub和Function的区别是,用Sub来创建一个方法它不返回数值;若是用Function来创建一个方法,它将返回一个数值作为结果.
    在Visual Basic.NET中定义方法时可以使用作用域关键字,用来指明该方法的使用范围,具体的作用域关键字包括以下几个:
    Private:私有属性,表明只能调用类中的代码.
    Friend:友元属性,表明可以在项目/控件中调用代码.
    Public:公共属性,表明可以在类外部调用代码.
    Protected:保护属性,表明改类的派生类可调用代码.
    对于没有显示声明的元素,一般默认为Public.
    在默认情况下,方法的参数声明为传值(ByVal)而不是传地址(ByRef),若参数的传递为传值那么ByVal均可忽略.
    【例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
    5.4.2 对象的声明和取消
    在面向对象的编程中,实际操作的是类中的具体实例——对象,类只是一个模板.因此创建一个对象的过程又被称为实例化.
    定义好类以后可以通过New关键字创建类的实例,即类的对象.
    1. NEW语句
    Visual Basic.NET使用NEW语句创建对象,程序员可以在任何地方使用NEW 代码.例如:创建一个myclass类型的对象,代码如下:
    Dim theclass as myclass
    Theclass=new myclass
    上面的语句可以简化为下面的语句:
    Dim theclass as new myclass
    2.取消对象
    要销毁一个对象,也就是释放与这个对象有关的资源,只需要给该对象变量赋值Nothing即可.代码如下:
    Dim theclass as myclass
    Theclass=new myclass '在此对象实例化和初始化
    Theclass=nothing '销毁theclass对象
    【例5.2】定义一个clock(时钟)类.通过这个类我们可以知道时钟的一些信息:时钟由时、分、秒三个整数来实现.所有这些都是时钟对象的属性,是对象性质的信息描述.另外,时钟还有显示时间等行为,这就是对它的方法,例如:ShowTime(显示时间).
    在常规声明段中先加入类的声明部分:
    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
    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
    上面定义了clock类,类中有hours、minutes、seconds三个属性,有ShowTime方法,功能为显示时间.下面对类的实例化及对象的应用.
    Module Module1
    Sub main()
    Dim time1 As New clock()
    time1.hours = 10
    time1.minutes = 28
    time1.seconds = 59
    time1.ShowTime()
    End Sub
    End Module
    首先、定义了clock类型的对象time1,使用New实例化类;然后为对象的属性进行赋值,最后、利用showtime()方法显示出新设置的时间.运行程序,程序在控制台窗口中运行.
    5.4.3对象的生命周期
    VB.NET中的对象有生存周期.定义一个对象的生存周期只需要一个New事件,这个New事件是在对象中其他代码之前运行的,并且在对象被创建时被调用.
    在VB.NET中,类似普通变量的初始化,类实例化时也可以初始化,称为对象的初始化,即给它的数据成员赋初值.对象初始化时,由一个特殊的成员函数完成,这个函数称为构造函数.对象的构造函数是在创建一个类的新实例的时候被调用的,程序中不能执行直接调用.构造函数的名称只能用New,并且不能指定函数类型,构造函数可以重载,即可以定义参数个数不同或参数类型不同的多个构造函数.
    构造函数的格式如下:
    Public Sub New( ……)
    ……
    End Sub
    若类中没有定义任何形式的构造函数,系统会自动生成默认的构造函数,即空构造函数.如下:
    Public Sub New( )
    End Sub
    如果类中以定义过构造函数,则系统不会自动生成默认的构造函数,一旦需要,则要求用户显示的定义这种形式的构造函数.
    1、对象的构造
    对象构造是在使用New关键字创建类的新实例对象时被触发的.VB.NET采用完整的构造函数的方法,即sub new.该方法的错误处理功能非常全面,且可以带有参数.程序员在创建类的实例对象时对它们初始化.
    Public class theclass
    Public sub new()
    '在这里初始化对象
    End sub
    End class
    利用这种类型的构造函数,就可以创建类的一个实例对象:
    Dim obj as new theclass()
    每一个VB.NET的类都应该有一个构造函数,若无明确声明,系统会自动建立一个不带参数的构造函数.
    另外,在创建对象时,用一些数据初始化该对象是很常见的.例如,可以从数据库中给对象加载一些数据,或者直接给它提供数据.不管用什么方法,最终的目的就是希望在对象被创建的时候为它提供一些数据.
    Public class theclass
    Public sub new(byval id as integer)
    '在这里使用id数值来初始化对象
    End sub
    End class
    现在,当创建类的对象时,要为它提供数据:
    Dim obj as new thclass(42)
    要提高灵活性,还可以带上可以选参数值.可以采用两种方式实现:一是通过使用optional关键字来声明一个可选参数,二是通过重载new方法.
    要使用optional关键字,只需把参数声明为可选即可,形式如下:
    Public sub new(optional byval id as integer=-1)
    If id=-1 then
    '在这里初始化对象
    Else
    '用id值来初始化对象
    End if
    End sub
    但这种方法并不理想,因为必须确定是否提供了参数,再确定如何初始化对象.使用两个独立的new方法来实现就简单的多:一种行为类型使用一个new方法,通过重载来实现的,形式如下:
    Public overloads sub new
    '在这里初始化对象
    End sub
    Public overloads sub new(byval id as integer)
    '用id值初始化对象
    End sub
    这种方法不仅避免了条件检查,简化了代码,还使任何客户程序更容易使用该对象.这个重载new方法可以使用参数也可以不用参数,有很大的灵活性.
    实际上,通过重载,可以创建许多不同的构造函数,也可以利用许多种不同的方法来初始化对象.
    在VB.NET中可以同时声明多个构造函数,只要带的参数不同,这样应用程序在建立对象时,会根据给定的参数选择调用的构造函数.
    将上一例题clock稍做一些改动,类中定义了两个构造函数,分别是不带参数的和带三个参数的构造函数,根据输出结果查看定义的对象调用了哪些构造函数.
    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
    Module Module1
    Sub main()
    Dim time1 As New clock()
    time1.ShowTime()
    Dim time2 As New clock(10, 28, 59)
    time2.ShowTime()
    End Sub
    End Module
    主函数中定义了两个对象time1和time2,定义time1时没有初始化该对象,而time2定义时初始化了该对象,即为time2的三个数据成员h,m,s分别赋了10,28,59.Time1调用了不带参数的构造函数而time2调用了带参数的构造函数.输出结果如下:
    图5.6构造函数实例运行结果
    2、对象的中止
    VB.NET是使用一个名为"垃圾收集"机制来中止对象的.什么是"垃圾收集"呢?在某个特定的时间根据特殊的规则,一个垃圾收集程序在所有的对象中运行,来查找那些已经不再被引用的对象,并将这些对象中止,即"垃圾收集"机制.这表明在VB.NET中,程序没有确定性结束,所以不能预计何时中止对象,直到垃圾收集程序运行之后才将它从内存中清除.
    垃圾收集的主要优点是它避免了由引用计数带来的循环引用问题.如果两个对象相互引用,且每个对象都没有任何其他引用它们的代码,垃圾收集程序会发现它们并将它们中止.还有对象的中止处理过程是在应用程序空闲时执行的,减少了对用户的影响.
    可以通过编写代码来手动触发垃圾处理程序:
    System.GC.Collect()
    但这个过程花一些时间,所以,不必每次中止对象都用这种方式进行的.设计应用程序时最好在最后中止对象的时候才将对象从内存中清除.
    垃圾收集机制在对象被中止时,垃圾收集代码将调用Finalize方法,进行最后的内存清理工作:
    Protected Overrides Sub Finalize()
    ……
    End Sub
    在有些情况下是不能使用Finalize方法的.如果一个对象使用一些非常有限的资源,就需要确保只要不再需要某些对象,就立即释放资源.这时可以调用一个方法Dispose来强迫中止对象,释放资源.这个不是很好的方法,但很有效:
    Public sub dispose()
    ……
    End sub
    在必要的时候,可以调用这个方法来确保内存清除工作的进行.
    引导学生练习:定义一个计算圆面积的类并生成一个对象测试.
    本次课总结
  • 下载地址 (推荐使用迅雷下载地址,速度快,支持断点续传)
  • 免费下载 DOC格式下载
  • 您可能感兴趣的
  • 面向对象程序设计语言  面向对象语言  面向对象的语言特性  面向对象语言学习吃力  面向对象语言吃力  面向对象的语言c#  面向过程语言  面向问题语言  面向应用语言