オブジェクトとは

 設計図を基に実物を作ることにより、使用することができるようになります。オブジェクト指向プログラミングの世界でも同じように、クラスを基にオブジェクトを作ることにより、コンピュータ上で動かすことができるようになります。これから見るのは、あらかじめ定義されているクラスを基に、メモリ上にオブジェクトを配置して使用する方法です。この作業は次の図のように表すことができます。

インスタンス生成
インスタンス生成

 上図にあるように、クラスを基にオブジェクトを作成することを、「インスタンス生成」と呼びます。それによりできあがった“モノ”がオブジェクトまたは、インスタンスとも呼ばれます。この手順を踏むことにより利用することができるようになるわけです。

インスタンス生成の書式
Dim インスタンス変数名 As クラス名
インスタンス変数名 = New クラス名(引数リスト)

Dim インスタンス変数名 As クラス名 New クラス名(引数リスト)

○ プロジェクト

 プロジェクトを作成して確認してみましょう。

プロジェクトの種類 Window フォーム アプリケーション
プロジェクト名 InstanceTest

サンプルダウンロード

○ 作成の準備

 先ほどのサンプルで作成したCarクラスの記述を今回のプロジェクトで利用します。「ClassTest」プロジェクトのフォルダーから、「InstanceTest」プロジェクトのフォルダーへ「Car.cs」をコピーしてください。

クラスファイルのコピー
クラスファイルのコピー

 次に、コピーしたソースファイルをプロジェクトに登録します。ソリューションエクスプローラーより、プロジェクト名を右クリックし、[追加]―[既存項目の追加]をクリックします。

プロジェクトにコピーしたファイルを登録
プロジェクトにコピーしたファイルを登録

 次の図のダイアログで、ファイルの場所が「InstanceTest」であることを確認して、「Car.cs」を選択し、「追加(A)」ボタンをクリックします。

クラスファイル指定
クラスファイル指定

 すると、ソリューションエクスプローラーに追加されるので、確認してください。

ソリューションエクスプローラーに追加される
ソリューションエクスプローラーに追加される

○ フォームデザイン

 次の図のようにコントロールを配置してください。

コントロールの配置例
コントロールの配置例

○ プログラム

 各イベントプロシージャに次のように記述しましょう。

Form1.vb

  1. 'インスタンス変数
  2. Dim obj As Car
  3. '表示用プロシージャ
  4. Private Sub showData()
  5.  Me.TextBox1.Text = Me.obj.m_speed
  6.  Me.TextBox2.Text = Me.obj.m_gas
  7. End Sub
  8. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  9.  'インスタンス生成
  10.  Me.obj = New Car()
  11.  'フィールド変数初期化
  12.  Me.obj.m_speed = 0
  13.  Me.obj.m_gas = 20
  14. End Sub
  15. '[加速]ボタンクリック
  16. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  17.  '加速する
  18.  Me.obj.speedUp(5)
  19.  Me.showData()
  20. End Sub
  21. '[減速]ボタンクリック
  22. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
  23.  '減速する
  24.  Me.obj.speedDown(5)
  25.  Me.showData()
  26. End Sub

○ 実行結果

実行結果
実行結果

○解説

 「加速」ボタンをクリックすると、スピードが上がり、ガソリン残量が減ります。「減速」ボタンをクリックすると、スピードが下がります。今回は、Carクラスを基に、車の実体を作成し、その車を動かしてみました。

インスタンス生成のイメージ
インスタンス生成のイメージ

 オブジェクトのイメージをつかむために、もう一台車を作って、動かしてみましょう。

○ プロジェクト

 プロジェクトを作成して確認してみましょう。

プロジェクトの種類 Window フォーム アプリケーション
プロジェクト名 InstanceWTest

サンプルダウンロード

○ 作成の準備

 「InstanceTest」プロジェクトで作成したCarクラスを利用して、複数台動かしてみましょう。「InstanceTest」から「Car.vb」をコピーし、プロジェクトに追加してください。

○ フォームデザイン

 次の図のようにコントロールを配置してください。

各コントロールの配置とプロパティ設定内容
各コントロールの配置とプロパティ設定内容

 各イベントプロシージャに次のように記述しましょう。

Form1.vb

  1. 'インスタンス変数
  2. Dim car1 As Car
  3. Dim car2 As Car
  4. 'car1表示用
  5. Private Sub showCar1()
  6.  Me.TextBox1.Text = Me.car1.m_speed
  7.  Me.TextBox2.Text = Me.car1.m_gas
  8. End Sub
  9. 'car2表示用
  10. Private Sub showCar2()
  11.  Me.TextBox3.Text = Me.car2.m_speed
  12.  Me.TextBox4.Text = Me.car2.m_gas
  13. End Sub
  14. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  15.  'インスタンス生成
  16.  Me.car1 = New Car()    '1台目
  17.  Me.car2 = New Car()    '2台目
  18.  '1台目の初期化
  19.  Me.car1.m_speed = 0
  20.  Me.car1.m_gas = 20
  21.  '2台目の初期化
  22.  Me.car2.m_speed = 0
  23.  Me.car2.m_gas = 60
  24. End Sub
  25. 'car1の[加速]ボタンクリック
  26. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  27.  '加速する
  28.  Me.car1.speedUp(5)
  29.  Me.showCar1()
  30. End Sub
  31. 'car1の[減速]ボタンクリック
  32. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
  33.  '減速する
  34.  Me.car1.speedDown(5)
  35.  Me.showCar1()
  36. End Sub
  37. 'car2の[加速]ボタンクリック
  38. Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
  39.  '加速する
  40.  Me.car2.speedUp(10)
  41.  Me.showCar2()
  42. End Sub
  43. 'car2の[減速]ボタンクリック
  44. Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
  45.  '減速する
  46.  Me.car2.speedDown(10)
  47.  Me.showCar2()
  48. End Sub

○ 実行結果

実行結果
実行結果

○解説

 同じクラスから2つのオブジェクトを作成しました。それぞれは見た目、つまり、フィールドやメソッドは同じですが、別物として動いているのを確認してください。

インスタンス生成のイメージ
インスタンス生成のイメージ

前へ   次へ