クラスについて 2002年7月7日
うわぁ。。久しぶりだ。。。
ビックリするほど久しぶりの更新です。
しかも、プログラミングについての話題でいきたいと思います。
ヘ(。Д、゜)ノテキストサイトだと思っていた方、すみません
Σ(´□`lll)悪気は無いんですよ。悪気は。
ただ、『一応』プログラミングサイトだっていうことをアピールしたいんですよ。うん。(本音(w
さて、今回の話題は『クラス』について。
VBを使ってる人にはあまり馴染みがない(と思う)クラス。
『ヽ(゜▽、゜)ノ標準モジュールの方がいいやぁ〜♪うぁっはっはぁ〜♪』
と思ってる方も多いかと思います。てか、俺もそうでした。
よく耳にするのはクラスは処理が遅いという言葉。
処理が遅いからといって、全く無用のものというわけではありません。
なぜこうもクラスがVBプログラマの間に浸透していないのか。
それは、クラスモジュールそのものが使いづらいということの他に
VBプログラマにはオブジェクトというものの考えがほとんど(と言っていいほど)無いためだと思います
俺もつい3ヶ月前まで、オブジェクトとか言われても『ヽ(゜▽、゜)ノハァ?』としか答えられませんでした。
今考えてみると
クラスほどRPG向きなモジュールって他にないって
と思うわけです。
クラスについて簡単に表すと、『オブジェクトを生成することができるモジュール』と言い現せると思います。
では、肝心のオブジェクトとはなんぞや?というと。。。
---注:ここからはJavaの用語が混じってきます。---
簡単に言うと、物と一緒なんです。
例えば『車』があるとします。
車は『ガソリン』を持っていて、ガソリンを使って『走る』ことができます。
走り続けることでガソリンは減っていき、ガソリンを『補充』しなければいけません。
ガソリンというのは、車が持っている『物』。
走ることやガソリンを補充するのは車が行う『行為』です。
ガソリンは、値を格納しておける場所。つまり変数にあたります。
そして走る、補充というのはオブジェクトが行う処理、つまりイベントあたるわけです。
もうすでにわかっている人もいると思いますが、テキストボックスなどがオブジェクトなんです。
便利ですよね〜。フォームに貼り付けるだけでそこに文字を入力できたり
テキストボックスの上でキーボードが押されたのを検知できたりするんですから。
MouseDownイベントのところに自分が行いたい処理を書くだけで
マウスが押されたことの検知を勝手に行ってくれて、処理を行ってくれる。。凄いことだと思います。
ヘ(。Д、゜)ノVBだから当たり前じゃんとか言われると元も子もないですが
これで、とりあえずクラス(オブジェクト)が便利ということが(ちょっとだけ)わかってもらえたかと思います。
それでは、何故RPG向きなのか。
クラスの用途は様々ありますが、RPGでは重複して行いたい作業がたくさんあります。
例えば、街でうろちょろ歩き回っているNPC。
町中に人がたくさんいて、それぞれが自分の意思を持っているかのように動いている。
これを標準モジュールだけで実現しようということ自体無理があると思います。
1人のキャラがたくさんステータスを持っていて、それをすべて配列に格納して制御。
一体どれだけの情報が必要なのでしょう?
キャラが歩くタイミングを変えるには?歩いているキャラと止まっているキャラ、足踏みをしていないキャラの区別は?
これをキャラ制御のためのループですべて行うのでしょう。。。
ヽ(゜▽、゜)ノんなめんどいことできるか!!
ただ、クラスを使えば別です。
例えば、『村人』というクラスを作成したとします。
村人はフィールド(プロパティ)にキャラの向き、状態、歩く早さ、キャラの位置情報などのステータスを持っています。
メソッド(イベント)にはキャラを動かす、自分がスクロールした時に村人も移動させるといったような処理を持っています。
メインループでキャラがスクロールした時、
npcMura.npcScroll(自分のスクロール量X, 自分のスクロール量Y)
とか呼び出すと村人も勝手に動いてくれます。(クラスの設計さえしっかりしていれば、ですけど)
さらに、そのオブジェクトを配列として扱えばさらに処理の効率は上がります。(VBではCollectionだったかと思います。)
そんなことくらい、標準モジュールでもできるじゃん。と思うかもしれません。
正直、その通りです。クラスを使わなければいけないというルールはどこにもありません。
ただ、俺はひとつの方法としてこんな方法があるというだけです。
キャラをオブジェクトとして扱えば、キャラ自体に命令を出すと勝手に動いてくれる。
メインPG側で色々と処理をさせるよりメンテナンス、処理の追加がしやすいかな?と考えているだけなんです。
戦闘においても敵キャラをオブジェクトとして扱えば、
ステータスや属性に値を渡してオブジェクトを生成し、そのオブジェクト単位で攻撃、魔法などの処理を個別に行うことが可能になります。
また、親となるクラスを作成し、それを継承した敵クラスと味方クラスを作れば
基本的な攻撃や魔法などのイベントは共有できて
攻撃の対象など違った処理をしたい場合、それぞれのクラスで個別に処理を行うことも可能になります。
※継承の例
テキストボックスとラベルのイベントやプロパティを見ると全く同じものがたくさんあります。(Height、KeyDownなど)
この二つは全く別のオブジェクトですが、使い方が共有できているものが多々あります。
素となるクラスがあり、テキストボックスもラベルもこのクラスのフィールドとメソッドを受け継いでいるため、このような便利なことができるというわけです。
この受け継ぐということを『継承』といいます。
クラスというのは使い方が解ればとても便利なものです。
VBはオブジェクト指向プログラミングではないのでいまいちわかりづらいところがありますが。。。(^^;)
VBでしかプログラムを作れないという方は、少しだけJavaを使ってみるといいかもしれません。
俺もJavaを使ってクラスやオブジェクトの概念を学びました。(会社の研修ですけど)
最初は何のことか全然わからないと思いますが、『これをVBで使えたら便利だろうなぁ。』と必ず感じる時が来ると思います。
VBで実装することが難しい機能を涙を呑みながら体感するのもいいと思います。(マルチスレッドなんてすごく簡単に実装出来ちゃいます。(w
他の言語を学習することは、VBを使う上でも必ずプラスになると思います。多分。(w
(。Д、゜lll)文字ばっかで見づらっ!
Σ(´□`lll)編集能力がなくてすみません。
BACK