クラス
■概要
クラスは特定の機能を実行するために必要な関数や変数をまとめることができる機能のことです。 クラスを使用することによりオブジェクト単位でプログラムを考えることができるようになるので、 オブジェクト指向型のプログラミングが可能となります。
■宣言と使用
●宣言 書式例: class クラス名 End class 具体例: class TestClass private m_Val1 As Long public Function GetVal1() As Long GetVal1 = m_Val1 End Function public Sub SetVal1(ByVal val) m_Val1 = val End Sub End Class ●使用 書式例: 書式①: Dim 変数名 As New クラス名 書式②: Dim 変数名 As クラス名 Set 変数名 = New クラス名 具体例: Class Test public m_Val As Long End Class Sub TestSub ' 書式① Dim test1 As New Test ' 書式② Dim test2 As Test test2 = New Test End Sub
■アクセス指定子
アクセス指定子とはクラスのメンバの使用できる範囲を指定することができる識別子のことです。 よく使用する識別子として「Public」「Private」「Protected」があります。 ●指定子の種類 ・Public クラスの内と外で使用可能 ・Private クラスの中で使用可能 ・Protected クラスの中と継承先のクラスで使用可能
■メンバの宣言
クラスのメンバは変数と関数を指しており、クラス内で宣言することで インスタンス化した際にそれらのメンバを使用することができます。 ●メンバ変数の宣言 ・書式 書式例: アクセス指定子 変数名 As データ型 具体例: Private m_TestVal As Long ●メンバ関数の宣言(Sub) ・書式 書式例: アクセス指定子 Sub 関数名(引数) End Sub 具体例: Public Sub Test01(ByVal val As Long) End Sub ●メンバ関数の宣言(Function) ・書式 書式例: アクセス指定子 Function 関数名(引数) As データ型 End Sub 具体例: Public Function AddSum(ByVal v1 As Long, ByVal v2 As Long) As Long AddSum = v1 + v2 End Sub
■プロパティ
プロパティはクラスや構造体のメンバ変数に設定できる機能です。 このプロパティを設定するとPrivateやProtectedでアクセスできないようにしている メンバ変数に対して取得や変更ができるようになります。 メンバ変数を取得するためのプロパティ関数には「Get」を 変更するためのプロパティ関数には「Set」を使用します。 ●宣言 ・書式例 ' m_Val変数に対してのプロパティ設定 Class Test ' プロパティで使用する変数を宣言 Private m_Val As Long ' プロパティ宣言開始 Public Property Val() As Integer アクセス指定子 Property 関数名 As データ型 アクセス指定子 Get Return m_Val End Get アクセス指定子 Set(ByVal 変数 As データ型) m_Val = 変数 End Set ' Get、Setのアクセス指定子を省略した際は ' Publicとして扱う End Property End Class ・具体例 ' m_Val変数に対してのプロパティ設定 Class Test Private m_Val As Long Public Property Val As Long Get Return m_Val End Get Set(ByVal v As Long) m_Val = v End Set End Property End Class ・使用側 Sub TestSub() Dim test As New Test Dim val As Long test.Val = 10 val = test.Val End Sub ●プロパティのメリット ・使う側が意識しない プロパティはクラスの中でメンバ変数に対しての処理を作成しますが、 クラスを使用する側はその処理を関数を呼び出していると意識することなく 通常のメンバ変数に対して代入や変更を行っているように使用できます。 ・特性を持たせた処理ができる GetとSetは取得、変更を行うための関数です。 この処理は基本的にプロパティのメンバ変数に対しての 取得、変更を行うものですが、ただ取得や変更を行うだけではなく 処理の内容を修正することも可能です。 例えばSetで設定する値のチェックを行うように処理を修正し、 バグの原因を排除することが可能です。 ・バグ対策 メンバ変数を単純にPublic指定にすると 様々な箇所で簡単に変更加えることができてしまいます。 そうするとメンバ変数を使った処理で問題が発生した際に どこで問題となる変更が行われたのか分かりづらくなります。 プロパティを設定することで、変更が行われる箇所が Setの内部のみとなりますので、Setをチェックすれば 問題の値を設定している箇所の特定がしやすくなります。
■継承
継承とは既にあるクラスを元にして新しいクラスを作成できる機能のことです。 この機能を使用することで既にあるクラスの機能を持ち、 拡張が可能な別のクラスを作成することが可能となります。 ●書式 ・書式例 Class Parent End Parent Class Child Inherits 親クラス名 End Class ・具体例 Class Parent Public m_ParentVal As Long End Parent Class Child Inherits Parent End Child ・使用例 Sub Test() Dim cls As New Child cls.m_ParentVal = 100 End Sub
■コンストラクタ
コンストラクタとはクラスをインスタンス化する際に最初に呼び出される関数のことです。 コンストラクタの目的はメンバ変数の初期化となります。 クラスの汎用性を高めるためにコンストラクタに引数を設定することもでき、 その引数の値を使用して変数の初期化を行うことが可能です。 ●書式 ・書式例 Public Sub New (引数) End Sub ・具体例 Class ConstractTest Public Sub New(ByVal val As Long) m_Val = val End Sub m_Val As Long End Class ・使用例 Public Sub TestSub() Dim ConstractTest test_class As New ConstractTest(100) End Sub
■モジュールとクラスの違い
モジュールとクラスはともにシステムに必要な変数や関数をまとめるための機能です。 しかし、モジュールとクラスは以下の違いがあります。 ●インスタンス化の必要の有無 クラスを使用するにはインスタンス化(Newによる作成)が必要ですが、 モジュールはインスタンス化する必要なくそのまま使用可能です。 この特性がモジュールとクラスのメリット、デメリットとなっています。 例: Module Module1 Public Dim ModuleVal As Long End Module Class Class1 Public m_ClassVal As Long End Class Sub Test() Module1.ModuleVal = 100 Dim cls As New Class1 cls.m_ClassVal = 1000 End Sub ●メリットとデメリット ・メリット モジュール: ・インスタンス化の必要がない ・単一を保障されている クラス: ・インスタンス化した数だけ同じ機能を持った インスタンスを作成できる ・デメリット モジュール: ・同じモジュールを複数作成できない クラス: ・インスタンス化が必須 ・単一ではない 上記のようにメリット、デメリットがあるのでクラスにするか、 モジュールにするかは作成する機能の内容の特性を踏まえて作成を行います。 ●モジュールとクラスの注意 モジュールの中にクラスを定義することは可能ですが、 クラスの中にモジュールの定義を行うことはできませんので、注意して下さい。 問題例: Class Class1 Module Module1 End Module End Class 成功例: Module Module1 Class Class1 End Class End Module
