2024/05/21

クラス化に挑戦: #5)クラスの初期化

クラスを利用する際は New を使用してインスタンスを作成します。

   Dim oEmp As New Employee

このタイミングで実行される特殊なメソッドがあります。オブジェクト指向の世界では『コンストラクタ』と呼ばれるのですが、簡単に言うとクラスの初期化処理を記述するメソッドです。


LotusScript とクラスの初期化

LotusScript では、”New” という固定された名称のメソッドがコンストラクタとして使用されます。どのユーザ定義クラスであっても New メソッドとなるのでわかりやすいですね。

New はメソッドですから通常のメソッドと同様にクラス内に記述します。

Public Class Employee
   Private zvBD As Variant

   Sub New()
      zvBD = DateNumber(2000, 1, 1)
   End Sub

         ・・・
End Class

このサンプルではメンバ変数 zvBD に 2000/1/1 という日付値をセットしています。


New メソッドと引数

NotesDatabase クラスを New する際にはサーバ名とファイル名を引数にセットします。

   Dim ndb As New NotesDatabase("Server1/Domino", "Sample.nsf")

これと同様のことがユーザ定義クラスでも可能です。実現方法は New メソッドに引数を指定するだけです。

例えばすでに従業員情報を管理するノーツデータベースがあったとします。前回までサンプルにしていた Employee クラスがこの DB から情報を取得する場合、次のようなイメージになります。

Public Class Employee
   Private zsEmpNo As String    '社員番号
   Private zvBD As Variant

   Sub New(ByVal vsEmpNo As String)
      Dim ndEmp As NotesDocument

      Set ndEmp = xGetEmpDoc(vsEmpNo)
      If Not(ndEmp Is Nothing) Then
         '従業員の情報をメンバ変数にセット
         zvBD = ndEmp.Birthday(0)
         zsEmpNo = vsEmpNo
      End If
   End Sub

   Private Function xGetEmpDoc(ByVal vsEmpNo As String) As NotesDocument
      '社員番号から従業員の文書を取得
         ・・・
   End Function
         ・・・
End Class

まず、インスタンスを初期化する際に社員番号を引数で与えます。社員番号から従業員データベースを検索し文書を取得します。その文書内の誕生日をメンバ変数 zvBD に保存しています。

クラスを利用する側では、次のように宣言することになります。

   Dim oEmp1 As New Employee("00123")


ディストラクタ

コンストラクタと対になる機能としてインスタンスが消滅する際に実行される処理があり、ディストラクタと呼ばれます。

LotusScript では、Delete という名称のメソッドとなります。

Public Class Employee
         ・・・
   Sub Delete()
      'ディストラクタをここに記述
         ・・・
   End Sub

         ・・・
End Class

私はあまり使用経験がないのですが、後片付けが必要なクラスで利用すると、もれなく処理を行えるので便利です。


まとめ

今回はクラスを初期化する機能を中心に、コンストラクタとディストラクタについて紹介しました。LotusScript の文法では、それぞれ New と Delete と名称が固定されたメソッドで記述します。

どちらも省略可能で、メソッド自体を定義しないと省略したことになります。


前回 クラス化に挑戦 次回


0 件のコメント:

コメントを投稿