オブジェクトとは
設計図を基に実物を作ることにより、使用することができるようになります。オブジェクト指向プログラミングの世界でも同じように、クラスを基にオブジェクトを作ることにより、コンピュータ上で動かすことができるようになります。これから見るのは、あらかじめ定義されているクラスを基に、メモリ上にオブジェクトを配置して使用する方法です。この作業は次の図のように表すことができます。
インスタンス生成
上図にあるように、クラスを基にオブジェクトを作成することを、「インスタンス生成」と呼びます。それによりできあがった“モノ”がオブジェクトまたは、インスタンスとも呼ばれます。この手順を踏むことにより利用することができるようになるわけです。
○ プロジェクト
プロジェクトを作成して確認してみましょう。
プロジェクトの種類 |
Window フォーム アプリケーション |
プロジェクト名 |
InstanceTest |
サンプルダウンロード
○ 作成の準備
先ほどのサンプルで作成したCarクラスの記述を今回のプロジェクトで利用します。「ClassTest」プロジェクトのフォルダーから、「InstanceTest」プロジェクトのフォルダーへ「Car.cs」をコピーしてください。
クラスファイルのコピー
次に、コピーしたソースファイルをプロジェクトに登録します。ソリューションエクスプローラーより、プロジェクト名を右クリックし、[追加]―[既存項目の追加]をクリックします。
プロジェクトにコピーしたファイルを登録
次の図のダイアログで、ファイルの場所が「InstanceTest」であることを確認して、「Car.cs」を選択し、「追加(A)」ボタンをクリックします。
クラスファイル指定
すると、ソリューションエクスプローラーに追加されるので、確認してください。
ソリューションエクスプローラーに追加される
○ フォームデザイン
次の図のようにコントロールを配置してください。
コントロールの配置例
○ プログラム
各イベントプロシージャに次のように記述しましょう。
Form1.vb
- 'インスタンス変数
- Dim obj As Car
- '表示用プロシージャ
- Private Sub showData()
- Me.TextBox1.Text = Me.obj.m_speed
- Me.TextBox2.Text = Me.obj.m_gas
- End Sub
- Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
- 'インスタンス生成
- Me.obj = New Car()
- 'フィールド変数初期化
- Me.obj.m_speed = 0
- Me.obj.m_gas = 20
- End Sub
- '[加速]ボタンクリック
- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
- '加速する
- Me.obj.speedUp(5)
- Me.showData()
- End Sub
- '[減速]ボタンクリック
- Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
- '減速する
- Me.obj.speedDown(5)
- Me.showData()
- End Sub
○ 実行結果
実行結果
○解説
「加速」ボタンをクリックすると、スピードが上がり、ガソリン残量が減ります。「減速」ボタンをクリックすると、スピードが下がります。今回は、Carクラスを基に、車の実体を作成し、その車を動かしてみました。
インスタンス生成のイメージ
オブジェクトのイメージをつかむために、もう一台車を作って、動かしてみましょう。
○ プロジェクト
プロジェクトを作成して確認してみましょう。
プロジェクトの種類 |
Window フォーム アプリケーション |
プロジェクト名 |
InstanceWTest |
サンプルダウンロード
○ 作成の準備
「InstanceTest」プロジェクトで作成したCarクラスを利用して、複数台動かしてみましょう。「InstanceTest」から「Car.vb」をコピーし、プロジェクトに追加してください。
○ フォームデザイン
次の図のようにコントロールを配置してください。
各コントロールの配置とプロパティ設定内容
各イベントプロシージャに次のように記述しましょう。
Form1.vb
- 'インスタンス変数
- Dim car1 As Car
- Dim car2 As Car
- 'car1表示用
- Private Sub showCar1()
- Me.TextBox1.Text = Me.car1.m_speed
- Me.TextBox2.Text = Me.car1.m_gas
- End Sub
- 'car2表示用
- Private Sub showCar2()
- Me.TextBox3.Text = Me.car2.m_speed
- Me.TextBox4.Text = Me.car2.m_gas
- End Sub
- Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
- 'インスタンス生成
- Me.car1 = New Car() '1台目
- Me.car2 = New Car() '2台目
- '1台目の初期化
- Me.car1.m_speed = 0
- Me.car1.m_gas = 20
- '2台目の初期化
- Me.car2.m_speed = 0
- Me.car2.m_gas = 60
- End Sub
- 'car1の[加速]ボタンクリック
- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
- '加速する
- Me.car1.speedUp(5)
- Me.showCar1()
- End Sub
- 'car1の[減速]ボタンクリック
- Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
- '減速する
- Me.car1.speedDown(5)
- Me.showCar1()
- End Sub
- 'car2の[加速]ボタンクリック
- Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
- '加速する
- Me.car2.speedUp(10)
- Me.showCar2()
- End Sub
- 'car2の[減速]ボタンクリック
- Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
- '減速する
- Me.car2.speedDown(10)
- Me.showCar2()
- End Sub
○ 実行結果
実行結果
○解説
同じクラスから2つのオブジェクトを作成しました。それぞれは見た目、つまり、フィールドやメソッドは同じですが、別物として動いているのを確認してください。
インスタンス生成のイメージ
前へ 次へ