摘要:VB是門面向對象程序設計的語言,該語言有四個主要的特徵:抽象、
   封裝、繼承、多態。本文主要針對封裝性做就實例性的闡述。

操作系統: Windows 2000 Advanced Server
編程工具: Visual Basic 6.0 

這裏我們將通過一個具體的實例來認識它的封裝性! 在面向對象方法
中,對象可看成是屬性(數據)以及這些屬性上的專用操作的封裝體。
封裝是一種信息屏蔽技術,封裝的目的是使對象的定義和實現分離。   

Step1:
  1.1新建一個工程命名為VBOOP;
  1.2單擊工程菜單,選擇添加類模塊後並單擊確定按鈕;
  1.3在其屬性窗口中將類的名稱改為TScore。

Step2:編輯TScore類模塊代碼

  2.1.這裏為TScore類定義四個私有(Private)變量,它們只能在本模塊
    中是可見的,即類的一些成員被隱藏起來,用户只能通過屬性過程
    或函數等方法來訪問,從而對對象進行封裝。

    定義變量的基本語法:
    Private/Publc <變量名> As <變量類型>

    代碼部分:
   

Private FName As String  '學生的姓名

    Private FMath As Single  '數學成績

    Private FEnglish As Single '英語成績



  2.2.為TScore類定義六個公用(Public)的屬性(Property)過程和一
    個計算總分的方法函數。

    定義方法的基本語法:
    Private/Publc Property Get <讀屬性過程名> As <屬性返回值類型>;
    Private/Public Property Let <寫屬性過程名>(ByVal 變量名 As 返回值類型);
    Private/Publc Function <函數名> As <函數返回值類型>;
    get: 將模塊中的私有變量的值賦給屬性過程,通常稱為讀;
    Let: 通過屬性過程給模塊中的私有變量值賦,通常稱為寫。

代碼部分:

    Public Property Get GetName() As String      

      GetName = FName   

    End Property

    Public Property Let SetName(ByVal Name As String) 

      FName = Name    

    End Property

    Public Property Get GetMath() As Single

      GetMath = FMath

    End Property

    Public Property Let SetMath(ByVal Math As Single)

      FMath = Math

    End Property

    Public Property Get GetEnglish() As Single

      GetEnglish = FEnglish

    End Property

    Public Property Let SetEnglish(ByVal English As Single)

      FEnglish = English

    End Property

    Public Function Total() As Single   '計算總成績函數       

      Total = GetMath + GetEnglish

    End Function



Step3:回到Form1窗口,在窗口上添加12個控件:
   
  3.1添加5個文本框txtName、txtMath、txtEN、txtTotal;
   
  3.2添加5個標籤labName、labMath、labEN、labTotal
    其Caption屬性分別為姓名、數學、英語、總成績;

  3.3添加2個命令按鈕ComSetValues、ComSearch
    其Caption屬性分別為賦值、查詢。  
  
Step4:編輯窗口事件

  4.1.構造Score對象及查詢關鍵字SearchKey。在面向對象方法
    中,我們可以這樣説定義類就是定義數據類型,而聲明對
    象就是聲明變量。也就是説,對象實際上就是變量。
    
    Dim Score As New TScore
    Dim SearchKey As String

  4.2.給模塊中四個私有變量賦值的單擊事件
    Private Sub ComSetValues_Click()
    If Val(txtMath.Text) >= 0 And Val(txtMath.Text) <= 100
      And Val(txtEN.Text) >= 0 And Val(txtEN.Text) <= 100
    Then
      With Score
        .SetName = txtName.Text
        .SetMath = Val(txtMath.Text)
        .SetEnglish = Val(txtEN.Text)
      End With
      txtName.Text = ""
      txtMath.Text = ""
      txtEN.Text = ""
      Print "姓名:" & Score.GetName & "數學:" & Score.GetMath & "英語:" & Score.GetEnglish
    Else
      MsgBox "成績的取值範圍:[0,100]", 64, "提示"
    End If
    End Sub

  4.3.查詢各科成績及總分的單擊事件
    Private Sub ComSearch_Click()
    SearchKey = InputBox("請輸入您要查詢的姓名關鍵字:", "查詢")
    If word = Score.GetName Then
      txtTotal.Text = Score.Total
      txtName.Text = Score.GetName
      txtMath.Text = Score.GetMath
      txtEN.Text = Score.GetEnglish
      txtTotal.Visible = True
      labTotal.Visible = True
    Else
      MsgBox "抱歉!無此記錄!", 64, "提示"
    End If
    End Sub

  4.4.窗口載入事件
    Private Sub Form_Load()
      txtTotal.Visible = False
      labTotal.Visible = False
    End Sub

  4.5窗口關閉事件,在這裏我們將釋放對象變量,否則將會發生存儲器泄露
    Private Sub Form_Unload(Cancel As Integer)
      Set Score = Nothing
    End Sub

Step5:到這裏,程序就全部寫好了,您只要按F5程序就可以運行了。