オブジェクト指向の実装
オブジェクト指向の考え方では1クラス1機能です。前回作成した、数秘術→社会人基礎力の数値を算出するクラス内に入力チェック処理を作るとあの処理、この処理…と面倒なので、チェッカークラスを作成します。
そして、staticの使い方に関しても触れます。
チェッカークラスは、チェック処理を担当するクラスです。
コマンドクラスから呼び出す
コマンドクラスはインターフェースを使用してCommandIFを実装したクラスであればなんでも良い様に作成しました。
今度は、入力チェック用のクラスを作成します。ここで大切なのは「どの様に使うか?」です。
今回は、シンプルにチェッカーユーティリティクラスを作成します。クラス名は「CheckwrUtil」にします。
使い方は以下の様に静的呼び出しで行います。理由は、インスタンス化する意味がないからこの様な形で実装します。
CheckerUtil.isMandatory("文字列");
クラスの実装は下の様になります。
public class ChckerUtil { public static boolean isMandatory(String inut) { // チェック処理 } }
そして、必須入力チェックなので、入力の有無を判定し、TrueかFalseを返却するように実装してやればオッケー。
具体的に
コマンドクラスでの実装サンプルです。
public class HelloCommand implements CommandIF { /* (non-Javadoc) * @see jp.zenryoku.sample.lv3.refactor.CommandIF#execute() */ @Override public void execute() { // TODO Auto-generated method stub System.out.println("名前を入力してください"); Scanner input = new Scanner(System.in); String inStr = input.nextLine(); if (CheckerUtil.isMandatory(inStr)) { // 未入力時の処理 } else { // 入力ありの時 } } }
executeメソッドで、入力時のチェック処理を行います。
とりあえずは、こんな感じの実装で使用することを想定して作りました。
ポイント
通常は、newしてから使用するメンバーメソッドを作るのですが、この処理には、インスタンスを作る必要がないので、staticをつけた静的メソッドに行くしています。
詳細
インスタンスを作る必要性に関して「通常」と言う言葉を使いましたが、何かしらの処理を行うのに、準備が必要な時、処理するデータを1クラスに1つ持たせたい場合などにはインスタンスが必要です。
例
例えば、DBにアクセスする時には、DBサーバーへのコネクションを取得、保持する必要があり、アクセス(データを取得する操作を複数人が行う想定の場合にはstatic(静的)クラスやメソッドは使えません。何故かと言うとstaticをつけると、メソッドの場合は、インスタンス1つにつき1つのクラスにしか影響しなかったのが全てのインスタンスに影響します。
具体的には
リストにデータを設定する場合、リストの中身のデータクラスがstaticだと、リストの中身が全部同じになります。
逆にstaticでない場合は、それぞれのクラスに別々のデータが設定されます。
## ポリモーフィズムのサンプル
CommandIF(インタフェース)を使用したポリモーフィズムの実行動画があります。