さて、OOPの1つの側面は、オブジェクトを作成し、そのオブジェクトを操作してプログラミングしていくことです。前ページの図2のようなウィンドウ・オブジェクトがすでに作成済みで、すでにメモリ上に存在すると仮定して、このオブジェクトを使ってOOPを実践してみましょう。
■オブジェクトを操作するために必要な参照変数
あらゆるものがオブジェクトであるC#やVB.NETのプログラムでは、実行時にはメモリ上にたくさんのオブジェクトが存在することになります。そのため、プログラム・コードから1つの対象となるオブジェクトを操作するには、そのオブジェクトを参照する変数がまず必要になります。
.NETプログラミングの世界では、ウィンドウのことを「フォーム」と呼ぶので、ここでは次の図3のように、ウィンドウ・オブジェクトを「myForm1」という変数で参照しているとしましょう。
1つ書き忘れていましたが、オブジェクトが作られたときには、そのタイミングで内部データの値が初期化される(初期値あるいはデフォルト値が設定される)のが普通です。この詳細については次回で解説します。
■メソッドを呼び出してオブジェクトを操作する
オブジェクトを参照している変数があれば、その変数を通じてオブジェクトが備えるメソッドを呼び出し、オブジェクトを操作することができます。
(1) ウィンドウの表示
とりあえず、ウィンドウを表示してみましょう。オブジェクトは単なるメモリ上の一領域なので、オブジェクトが存在するだけでは何も起こりません。図3で示したウィンドウ・オブジェクトでは、Showメソッドを呼び出すと、ウィンドウをデスクトップ上に表示できます。
Showメソッドは、ウィンドウを実際にデスクトップに描画する機能を持っています。このときには、内部データにあるwidthとheightの大きさのウィンドウを描画することになるでしょう。
メソッド呼び出しは、次のようにオブジェクトを参照する変数とメソッドをピリオド(.)で区切って記述します。
このコードは、「変数myForm1が参照しているウィンドウ・オブジェクトのShowメソッドを呼び出す」という意味になります。
メソッドには、呼び出し時にパラメータ(引数)を指定するようなものもありますが、このShowメソッドはパラメータを取らないという前提です。
(2) タイトルバー文字列の設定
続いて、いま表示したウィンドウのタイトルバーに文字列を設定してみましょう。これには、ウィンドウ・オブジェクトのSetTextメソッドを呼び出します。このメソッドはパラメータとして文字列を1つ指定します。
これにより先ほどのShowメソッドにより表示されている(はずの)ウィンドウは、次のようになります。
SetTextメソッドは、表示しているウィンドウのタイトルバー部分に、パラメータで渡された文字列をセットします。と同時に、内部データのbartextにも、その文字列を代入しておきます。なぜならウィンドウの再描画時などで必要となるからです。
(3) ウィンドウのクローズ
ウィンドウが不要になった場合には、Closeメソッドを呼び出して、ウィンドウを閉じることができます。この呼び出しは次のようになります。
以上のように、まずオブジェクトを参照している変数を指定し、次にそのオブジェクトのメソッドを呼び出してオブジェクトを操作する。これがOOPの1つの側面です。
これらはVBプログラマにとっては当たり前の記述方法ですが、そういう意味では、これまでのVBでのプログラミングもOOPであったといえるかもしれません。
■2つのメソッドをまとめたプロパティ
上記ではウィンドウにタイトルバー文字列を設定しましたが、現在ウィンドウに設定されている文字列を取得したいようなケースも考えられます。ウィンドウ・オブジェクトの図にはありませんが、この機能は「GetTextメソッド」としてオブジェクトが持っているのが普通です。
同様にして、たいていの内部データを読み書きするために、Set〜メソッド/Get〜メソッドのペアがオブジェクトには必要となることがよくあります。
.NETでは、こういったいつもペアで必要となるメソッドは、プロパティという機能を使って1つにまとめてオブジェクトに持たせることができます。プロパティは、2つのペアとなるメソッドを1つにまとめて、簡単に呼び出せるようにしたものです*。
* 一般的には、プロパティとはオブジェクトが持つ「属性」です。例えば、ウィンドウの幅や高さはウィンドウのプロパティとなります。.NETでは、単に属性値の読み書きだけでなく、プロパティへのアクセスをメソッドの呼び出しとして処理できます。これにより、内部データに設定されようとしている値をチェックしたり、関連する別の処理を行ったりできます。
例えば、Textという名前のプロパティがあるとすると、SetTextメソッドを呼び出す代わりに、次のようにしてタイトルバー文字列をセットすることができます。
すでにセットされているタイトルバー文字列を文字列変数myTitleに取得するには、同じプロパティを利用して、次のように記述できます。
これらTextプロパティへのアクセスは、機能的にはSetTextメソッドやGetTextメソッドを呼び出しているのと同じですが、コードをより簡潔に記述することができます。
Textプロパティを加えてウィンドウ・オブジェクトの図を書き直すと、次の図5のようになります。Textプロパティも、ShowメソッドやCloseメソッドと同様に、オブジェクトを操作するために外部に公開しています。
以上のように、オブジェクトの操作は基本的に、そのオブジェクトが持っているメソッドやプロパティによってのみ行います。
Copyright© Digital Advantage Corp. All Rights Reserved.