第七讲 面向对象的程序设计

第七讲     面向对象的程序设计

  1. 面向对象程序设计基础
  2. 对象
  3. 继承
  4. 多态性
  5. 接口
  6. 模块与类

 

面向对象的特性

l          抽象性

l       现实世界的物体抽象成对象

l       现实世界的物体之间的关系抽象成软件系统中对象之间的关系

l       对具有相同属性和方法的对象抽象成类

l          继承性

l       允许基于现存类创建新类,新类继承基类的所有属性、方法和事件,并可以附加新属性和方法以进行优化。

l         多态性

l       对不同事物的同一操作时的不同反应。

l       允许在不同类中定义同名方法或属性 , 这对于面向对向的编程是非常重要的,因为可以调用同名方法而无论对象的类型如何 .

运算符重载                                         函数重载

     30+40                                               Print(20)

      35.5+21.3                                         Print(“abcde”

      Object1+Object2                              Print( a )

VB.NET 中面向对象的特性

l       封装性

    Class Employee

      .....

    End  Class

l       继承性

    Public Class  Form1 Inherit  System.WinForms.Form

l       重载   入参类型、数量、

    Overloads Sub Display(Byval  theChar As Char)

     ...

     End Sub

    Overloads Sub Display(Byval  theInt  As  Integer)

     ...

     End Sub

l       多态

     DbCon1.open()

     DataReader1.open()

添加类

l       VB.NET 中可以直接添加一个类。添加类的操作步骤为:

l       在集成开发环境中新建一个项目。

l       单击系统菜单 文件 添加新项 选项,进入 添加新项 对话框。

l       选择 选项,单击 打开 按钮,进入类的创建编辑窗口。在 解决方案资源管理器 窗口中,同时出现一个新的以 “.vb” 为扩展名的文件。    

l       说明:在一个 “.vb” 文件中可以包含多个类、模块以及其他代码 ,用户可以向其中添加代码。在 VB.NET 中,文件的类型是由文件的内容决定的,而不是文件的扩展名。

类的声明

VB.NET 中,类的实现包括两部分内容:类的说明和类的主体。其语法格式为:

      [ 〈类说明修饰符〉 ] Class 〈类名〉                

          [ 〈类主体〉 ]

      End Class

    说明:

   ①〈类说明修饰符〉包括 Public Private Friend Shared 等,用来说明访问权限。默认值是 Public

    类名是由程序员自己定义的合法的字符串,每个类说明都必须有类名。

    每个类中,代码都必须有关键字 Class End Class 对应,使用该关键字的目的是为了在一个源文件中包含多个类。

    在〈类主体〉中编写程序代码。

类的成员

类的成员可以分为两类:类本身所声明的和从其他基类中继承的。类的成员有以下几种类型:

    成员常量:类中的常数。

    成员变量:类中声明的变量。

    成员方法:用于执行一定操作或动作的子过程函数

    成员属性:用于设置和检索类中密切相关的数据值

    成员事件:用于感知发生了什么事情,是类对外界的响应

    构造方法:用于完成类的初始化 工作。

    共享成员 共享方法 :可以跨类存在,相当于一类对象的全局变量和全局方法。

    基类 : 如果一个类是从另一个继承而来的,那么该类就包含它的父类。

    接口 : 对象与其他对象交互的接口。

类和名称空间

名称空间是类的一种组织结构,它将父类命名为名称空间,即赋予某个名称,所有由它衍生的子类都是这个名称空间的成员,每个下一级的子类也都拥有自己的子名称空间,因而构成呈树状分布的一个名称空间集合。

用户也可以自己声明一个名称空间。 VB.NET 中名称空间使用块结构来定义。其语法格式为:

      NameSpace [ 〈名称空间别名〉 ]

      Class Class1

        ...

      End Class

      Class Class2

        ...

      End Class

        ...

      End NameSpace

创建成员变量

       成员变量和程序的一般变量一样,需要先声明。对于成员变量,主要通过以下几个关键字来控制变量的作用域:

    Private :私有成员,仅适用于声明它的类中的代码

    Friend :友元,仅适用于声明它的项目中的代码

    Protected :保护成员,仅适用于类内部成员和它的继承类访问

    Public :公有成员,适用于类外的代码,具有最大的开放性

创建成员的属性

可以创建成员的属性。其语法格式为:

      [ 〈访问权限〉 ] Property 〈成员名称〉 As 〈成员类型〉

        Get

            Return Private_Value

        End Get

        Set

            Private_Value= Value

        End Set

     End Property

访问权限:

Public (公有属性,系统默认值) Protected (保护属性,类家族可以使用) Shared (共享属性) NotOverridable (不可重定义属性) Overridable (可重定义属性) Override (重载属性) ReadOnly (只读属性) WriteOnly (只写属性)

创建成员的方法

       方法是对象执行的动作,是在类中编码的子过程或函数。它可以利用自身的数据,处理生成输出结果或者执行服务程序的信息。

其语法格式为:

   [ 〈访问权限〉 ] 〈方法类型〉 〈方法名〉 ( [ 〈成员列表〉 ] )

             …

   Return 〈方法类型〉

l       访问权限: New (构造方法) Friend (友元方法) Public (公有方法) Protected (保护方法) Shared (共享方法) Overridable (可重定义方法) Override (重载方法)

l       方法类型: Sub Function

创建成员的事件

事件为类和类的实例即对象提供的向外界发出通知的能力。通过事件,对象可以响应用户的操作,与用户进行交互。在类中创建事件的语法格式为:

  [ 〈访问权限〉 ] Event 〈事件名称〉 ( 〈参数列表〉 )

  public Sub 〈方法名称〉

          …

RaiseEvent 〈事件名称〉 激发事件

End Sub

 

共享方法

       VB.NET 中,一个类不仅可以拥有所有常规的方法和属性,还可以拥有一些不需要创建类的实例方法,这些方法就是共享方法。

       一个共享方法不必像通常那样通过对象实例来访问,而可以更直接地从类中访问

共享方法不需要创造实例。

Public Class Math

Shared Function Add(byval n1 as decimal,byval n2 as decimal ) as decimal

Return n1+n2

End Function

End Class

Private Sub Button1_Click(Bycal sender As Object,Byval e As EventArgs)Handles Button1.Click

Dim result as Decimal

result = Math.Add(5,10)

Label1.text=result

End Sub

 

共享成员

       共享成员 就是在所有 和所定义派生类 的实例之间共享的方法、属性、字段和事件。所有使用类创建的对象都可以访问相同的数据、共享实现过程,并且收到相同的激发事件。

Public Class ShareClass

       Public Shared SharedValue As String

       Public Shared Sub ShareMethod() 

          MsgBox("This is a shared method.") 

       End Sub

End ClassSub

TestShared()

       Dim Shared1 As New ShareClass() ' 创建了类的一个实例 .

       Dim Shared2 As New ShareClass() ' 创建了类的第二个实例 .

      Shared1.SharedValue = "Share Value 1"  ' 给共享字段赋值

      Shared2.SharedValue = "Share Value 2" ' 重写共享字段的值

      ShareClass.ShareMethod() ' 不用创建实例就可以调用类的方法 .

End Sub

 

3. 对象

      VB.NET 使用 New 语句来创建对象,用户可以在任何地方使用 New 语句。利用 New 语句可以创建 VB.NET 提供的对象,也可以创建用户自定义的对象。

    例如,创建一个 VB.NET 提供的对象,代码如下:

      Dim ObjectLabel As Label

      ObjectLabel = New Label

      Dim ObjectLabel As New Label

        对象与普通变量一样,具有一定的类型、具有一定的作用范围。该段代码首先声明一个对象,再通过 New 方法实例化了一个对象,接着就可以在程序中使用对象的属性、方法和事件俩。创建用户自定义对象。      

对象的使用

1. 对象的属性

    对象的属性分为 4 类:只读属性、只写属性、读写属性和集合属性

只读属性是只能在运行阶段读取的属性;只写属性是使用对象的,必须写入的属性,而用户无法读出它的值;读写属性是在运行阶段可以设置、也可以读取属性值的属性;集合属性包含着一类相似的属性值或项目,它们还具有自己的属性和方法。

2. 对象的方法

    对象的方法可以直接使用。 VB.NET 会自动在方法名后加一对括号 “()” 。方法可以有参数,也可以不带参数。

3. 对象的事件

    对象的事件也可以直接使用。当创建了一个对象后,可以在代码编辑器窗口的 方法名称 下拉列表框中选择,也可以从键盘输入。

对象的终止

        取消对象的引用,只是将该对象设为空对象,而该对象还在内存中存在,还可以继续使用,只不过是暂时在内存中被挂起。

        VB.NET 使用名为 垃圾收集 方案来终止对象。在特定的时间,一个任务会在所有的对象中运行来查找哪些已经没有被引用的对象,并且将这些对象终止,这就是所谓的垃圾收集。因为 VB.NET 是以事件为驱动的,所以没有确定性结束,不能预计何时终止对象。直到垃圾收集程序运行之后才将它从内存中清除。

        垃圾收集的主要优点是它清除了由引用计数器带来的循环应用问题。如果两个对象相互有引用,并且在程序中没有其他相互引用的代码时,垃圾收集程序就会发现它们并将它们终止。

        垃圾收集还有一个潜在的优点:在对象被取消引用的时候不用化许多的精力在终止对象上,以减少对用户的影响。

4.  继承

继承的最大好处就是可以实现代码复用,子类从父类中继承各种特征,只要在子类中添加自己的特性代码就可以形成新的类。

 

基本继承的语法格式为:

Public Class 〈类名〉

     Inherits 〈父类名〉

     …

End Class

限制继承

在默认状态下,创建的任何类都是可以用做基类。但有时需要创建一个不能被继承的类,这时可以在类的声明中使用 NotInheritable 关键字:

      Public NotInheritable Class HeadMaster

          ……

      End Classs

使用 NotInheritable 关键字以后,其他代码都不能再使用 Inherits 来创建一个由这个基类继承而来的子类。

也可以限制继承父类中的部分方法和变量。通常当通过继承创建子类的时候,子类从父类中继承了全部的 Public Friend 的属性、变量和方法。如果在父类中声明了一个 Private 的方法和变量,那么在它的子类中就不能得到这个类的方法和变量。

跨语言继承

.NET 环境中实现跨语言继承是非常容易的。 .NET 环境为用户提供了不同语言编写的组件之间相互调用的良好平台。

VB.NET 可以创建处理代码,这些代码是运行在 .NET 框架上的。所有的管理代码可以和其他类型的处理代码交互作用,而不管用户是用什么编程语言来创建的。实际上,许多的 .NET 系统类库是在 C# 上编写的,而用户在上编写 VB.NET 程序的时候,可以继承这些类,将这些类作为基类使用。

可视化继承

VB.NET 的继承特性不仅仅局限与代码方式的继承,而且支持可视化继承,也就是指当用户用 Windows 窗体和控件等创建一个新的窗体,通过继承用户可以得到和这个窗体具有相同布局、控件和行为的窗体。也可以通过可视化继承创建自己的 Windows 控件。

        VB.NET 中窗体是一个类而不是一个实例,用户编写的 Windows 应用程序,是通过不断向类中添加对象、属性、方法和事件等代码完成的。向 Windows 应用程序添加一个继承的窗体和添加一个新的窗体是没有区别的。单击系统菜单 文件 添加新项 选项,进入 添加新项 对话框。选择 “Windows 窗体 选项,单击 打开 按钮,就向 Windows 应用程序添加一个继承的窗体。

        这种可视化继承可以称的上是所见即所得,这样可以大大提高编程的效率。

 

5. 多态性

多态性是指当两个或两个以上的类具有相似的属性或方法的情况下,编译程序自动根据这些属性和方法找到相应对象的能力。

多态性通常与继承有关,即多态性常常伴随着对类的继承及重载而存在。此外,多态性还可以存在于独立的类中,即不相干的类之间也可以利用多态性来实现对一些接口的共享。

 

6. 接口

接口相当于一种特殊化的类。在这种类中只定义了一系列的属性、方法和事件,而没有更多的程序操作代码。

接口的实现可以是类,也可以是结构。接口的定义用的是 Interface 关键字,实现时用的是 Implements 关键字。

Public Interface IHenry

    Sub subX(ByVal x As Integer)

    Function fcnY(ByVal y As Integer) As Long

    Property proZ() As String

End Interface

Public Class CHenry

    Implements IHenry

    Private z1 As String

    Sub subX(ByVal x As Integer) Implements IHenry.subX

        ' 填写实现代码

    End Sub

    Function fcnY(ByVal y As Integer) As Long Implements IHenry.fcnY

        ' 填写实现代码

    End Function

    Property proZ() As String Implements IHenry.proZ

        Get

            Return z1

        End Get

        Set(ByVal Value As String)

            z1 = Value

        End Set

    End Property

End Class

 

7.  模块与类

    VB.NET 中还存在一种重要的引用类型 —— 模块( Module )。它与类非常相似,可以用来封装数据和程序。模块的语法格式为:

          Module 〈模块名称〉

               ...

          End Module

       模块主要是为应用程序提供全局变量和全局方法 。模块可以包括以下成员:

      成员变量:与类中的成员变量非常相似。

      成员方法:与类中的方法非常相似,也包括 Sub 方法和 Function 方法。

   

模块与类的区别

对模块的成员的访问权限有:

  Public :公有类型。此时的变量和方法相当于类中的全局变量和共享方法。适用于项目中的所有代码。

  Private :私有类型。只适用本模块内使用,任何的模块外部的对象都不能访问。

 

模块与类的区别:

l           模块( Module )就是 VB.NET 公共函数、子程序、常数、变量、枚举和用户定义类型的集合。模块中的程序可以被整个程序访问。 通常,用到某个模块的程序时,该模块才被加载。

l         类( Class )是 VB.NET 中对象的模版,它定义了对象的方法、属性和事件。只有用类创建对象时,类被加载。只能用对象语法操作类模块中的程序,它是 VB.NET 数据封装的有效手段。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值