網頁

物件導向程式設計入門(Object-Oriented Programming,OOP) for Visual Basic(一)--物件設計

物件導向程式設計是一門很好玩的"方法論",當你在基本的程式設計上已經駕輕就熟,想要更上一層樓時,就可以往物件導向程式設計的方向來前進。物件導向本身使用很多方法理論的知識,而不是程式設計的內容,所以讀起很苦澀,我想用比較簡易的方法帶大家入門


接下來的幾篇都不會太大,因為物件導向本身是個思考的過程,所以小小一篇有利吸收,一次吸收一點點,慢慢了解物件導向的思考過程,進而加強整體程式設計的實力。

  1. 類別(Class)
    Class有同類的意思。
  2. 物件(Object)
    Object都是參考某個Class類別產生Instance(實例、實體),所以Class可視為Object的"樣板"或"藍圖"。
  3. 設計類別
    一個類別裡包含四大元素:




    • 資料成員、資料變數、欄位(Field)成員;
      為Class中所定義各種Data Type變數。名稱很多種,簡單記成Class裡的"變數"就好了。
    • 方法(函式、副程式);
      資料成員用來記錄資料,但如果要行進資料處理資料邏輯判斷,則要用方法。




      • 副程式(Sub),執行後無回傳值
      • 函式(Function),執行後可將結果傳回(return)
    • 屬性
      用來存取Class資料成員的值。它提供外部程式存取Class內部資料成員的彈性,又可以在存取同時加入邏輯判斷
    • 建構子
      在Object建立時(初始化)執行一段程式。
  4. 修飾元




    • Public
      共用成員,Class內外程式碼都可以存取。
    • Private
      私有成員,只有成員宣告範圍的程式碼才能存取(預設)。
      即這個Class.vb程式碼(此物件本身)內部才能存取。
    • Protected
      介於Public與Private之間,只有宣告範圍及繼承架構下的Class才能引用。
      即這個Class.vb程式碼(此物件本身)內部及繼承此Class.vb物件的物件才能存取。

屬性範例

我們Class中放一個Private _birthday As Date,基本上是可以存放"任何時間",但Birthday是不可能發生在未來。
Public Class OOP

    Private _birthday As Date
    ''' <summary>
    ''' 生日,但生日無法設定在未來。
    ''' </summary>
    ''' <value></value>
    ''' <returns>日期(生日)</returns>
    ''' <remarks>設定(Set)時必須判斷是否小於現在(Now)</remarks>
    Public Property Birthday() As Date
        Get
            Return _birthday
        End Get
        Set(ByVal value As Date)
            If value <= Now Then
                _birthday = value
            Else
                _birthday = Now.Date
            End If
        End Set
    End Property

End Class
如果我們想在加一個年紀屬性呢?分析一下,你會發現年記會隨時間遞增不固定,而且無法設定,必須從生日計算。
Public Class OOP

    Private _birthday As Date
    ''' <summary>
    ''' 生日,但生日無法設定在未來。
    ''' </summary>
    ''' <value></value>
    ''' <returns>日期(生日)</returns>
    ''' <remarks>設定(Set)時必須判斷是否小於現在(Now)</remarks>
    Public Property Birthday() As Date
        Get
            Return _birthday
        End Get
        Set(ByVal value As Date)
            If value <= Now Then
                _birthday = value
            Else
                _birthday = Now.Date
            End If
        End Set
    End Property

    ''' <summary>
    ''' 年紀會隨時間遞增,不固定,可從Birthday推得。
    ''' </summary>
    ''' <value></value>
    ''' <returns>String(年紀)</returns>
    ''' <remarks></remarks>
    Public ReadOnly Property Age() As String
        Get
            Return (Now.Year - _birthday.Year + 1).ToString()
        End Get
    End Property

End Class

沒有留言:

張貼留言

感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。