- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- VstoneMagicを使ってみる/プログラミング/クラス・メソッドの切り分け へ行く。
- 1 (2015-10-06 (火) 19:01:47)
- 2 (2015-10-06 (火) 21:03:12)
- 3 (2015-10-06 (火) 23:26:04)
- 4 (2015-10-08 (木) 09:32:43)
2.3 クラス・メソッドを切り分けたプログラムの作成 †
本ソフトウェアでは、一つのクラス内に複数のメソッドを作成したり、クラスそのものを複数作成することができます。プログラム中の処理を、これらの形式で細分化することで、類似する処理を使いまわしたり、プログラム自体を整理することができます。
例えば、繰り返しや分岐を多用する複雑なプログラムをメインメソッド一つで作成する場合、ブロック数が非常に多くなり、プログラムが煩雑になります。そこで、類似する処理や動作(モーション)を別のメソッドとして作成しておき、メインメソッドからは、それらをサブメソッドとして呼ぶ仕組みにすると、メインメソッドは大まかなロジック処理だけの記述となり、プログラムの流れを整理しやすくなります。また、サブメソッドの数が多くなってプログラムが見づらい場合は、サブメソッド専用のクラスを別に作成してそちらにサブメソッドをまとめると、プログラム全体を把握しやすくなります。
■サブメソッドの活用例 一般にモーション(動作)のプログラムは長くなるため、別のメソッドに切り分けます。メインメソッドはアルゴリズムを中心にプログラムし、動作が必要な箇所でサブメソッドを呼び出します。
本章にて、先ほど作成したプログラムをベースに、クラスやメソッドを分けたプログラムを作成してみましょう。具体的には、ポーズブロックを使った実際の動作部分を「motion」というクラスに分けて、先ほど作成した動作をmotionクラスに移します。また、motionクラスに新しい動作として「右手を上げる」「左手を上げる」「うなづく」の動きをそれぞれ追加します。そして、メインメソッドからは、motionクラスのそれぞれのメソッドを呼び出して、作成した全ての動作を実行してみましょう。
クラスとメソッドの追加 †
まずは、現在のワークスペースに新しいクラスとメソッドを追加します。まずは、メインクラスを作成したときと同じように、次の手順でワークスペースにクラス「motion」を作成してください。
- ○ クラスの追加
- ○ サブメソッドの作成と命令ブロックのコピー・貼り付け
motionクラスを追加したら、エクスプローラからダブルクリックして、motionクラスのクラスウィンドウを表示しましょう。更に、メソッドブロックを一つ追加して、メインメソッドの動作の移植先を作りましょう。
続いて、メソッドの名前を「mot1」に変更しましょう。追加したメソッドブロックをクリックすると「プロパティウィンドウ」に現在の設定が表示されるので、「methodName」の項目を「method」から「mot1」に書き換えてください。
続いて、現在メインメソッドに存在する「手を上げる」動作をmotionクラスに移動します。命令ブロックは、ポーズスライダと同様にマウス操作で選択することができ、選択したブロックは、一般的なWindowsのファイル等のように、コピー・切り取り・貼り付けが可能です。ブロックのコピー・貼り付けは、異なるクラス間でも行うことができます。
まずは、「mymain.java」のクラスウィンドウのタイトルバーをクリックして、コピー元のクラスを画面に表示させます。続いてクラスウィンドウ中の何もないところをドラッグして、目的のブロックを選択状態にしてください。ブロックを選択したら、クラスウィンドウのツールバーの「切り取り」ボタンでブロックを切り取ってください。
続いて、motion.javaにブロックを貼り付けます。貼り付けたブロックのつなげ方は、つなげるブロックのコネクタ同士を隣接させます。モータONブロックをドラッグして、メソッドの開始ブロックに隣接させましょう。
メインメソッドからのサブメソッドの呼び出し †
新しいクラスとメソッドを作成したら、メインメソッドからサブメソッドを呼び出す部分を作りましょう。サブメソッドは、エクスプローラの項目をクラスウィンドウにドラッグ&ドロップすることで、そのメソッドを呼び出す命令ブロックを追加できます。
エクスプローラより、motion.javaの「mot1」メソッドを、mymain.javaのクラスウィンドウにドラッグ&ドロップしてください。
mot1を呼び出す命令ブロックが作成されたら、mainのメソッドに接続してください。ちなみに、ブロックの接続方法は、ブロック同士の隣接以外に「接続元のコネクタをドラッグし、矢印を接続先のブロックにドロップする」と言う方法もあります。ここではその方法で接続してみましょう。
それでは、正しくプログラムが作成できているか、一度ビルド・実行して確かめましょう。本ソフトウェアのツールバーより「実行ボタン」をクリックして、プログラムのビルドと実行を行ってください。実際の動作は先ほどのプログラムと変わりませんが、エラーが出ずにビルド・実行できれば、正しくプログラムが作成できています。
プログラムの実行が確認できたら、更にmotionクラスに別の動作(メソッド)を追加します。作成した「mot1」のメソッドを、今度はコピーして同じmotionクラス上に二つ貼り付けましょう。
コピーしたメソッドは、それぞれ「mot2」「mot3」という名前に変更してください。そして、前者を「右手だけ上げる」、後者「左手だけ上げる」という動作に作り変えましょう。ポーズウィンドウが既に開いている場合、クラスウィンドウでposeブロックをクリックするとそのブロックのポーズが編集できるようになります(poseブロック以外をクリックすると、ポーズスライダの一部が非表示になり、編集機能が無効になります)。
両手を上げる動作を「片手を上げる」に変更する場合、各メソッドの2番目のポーズ(手を上げたポーズ)を、左右どちらかだけ基準ポーズに戻せば作成できます。
mot2,mot3の動作を作成したら、先ほどのようにエクスプローラよりメインメソッドのクラスウィンドウにドラッグ&ドロップし、メソッド呼び出しブロックを追加しましょう。
追加したブロックをメインメソッドに接続したら、プログラムの実行確認をしてください。
ビルドエラーが出ずにプログラムが実行され、ロボットがmot1、mot2、mot3の各動作をすれば、正しくプログラムが作成できています。
基本的に、クラスやメソッドが大きくなりすぎると、プログラムが見づらくなり、無駄も多くなります・このような場合に、クラスやメソッドを小分けすることで、プログラムの整理ができます。
サブメソッドを単体で動作確認したい場合は、サブメソッド自体をメインメソッドに設定することで、メインメソッドに呼び出しブロックを追加せずに確認できます。確認後はメインメソッドの設定を忘れず元に戻しましょう。
メインメソッドで初期化処理(モータON等)を行っているプログラムの場合、サブメソッド単体で動作確認すると、その初期化処理が実行されず、正しく実行されない場合があります。サブメソッド単体での実行時に、エラーが発生したり意図した動作にならなければ、この点に問題が無いか確認してください。