UML Design(設計)9 〜AP設計 クラス図の作成1〜
前回作成した、役割分担よりクラスの一覧ができたので、クラスに何をさせるのか?を考えていきます。作成したクラス一覧は以下の通りです。
- A. TextRPGクラス(Main)
- B. Titleクラス(Command)
- C. CharactorCreatorクラス(Command)
- D. Dungeonクラス(Command)
- E. Utilクラス
- F. Commadクラス: コマンドの数だけ作る
ここで、注意しておきたいのが、A〜Dのクラスは全てFのクラスに入るところです。
Fのクラスは、インターフェースクラス・・・インタフェースを実装するクラスにするのでUtilクラス以外は全てCommandクラスのカテゴリに入ります。
コードで書くと下のような感じになります。
public class TextRPG {
public static void main(String[] args) {
// メインクラス
TextRPG main = new TextRPG();
// コマンドインターフェースクラス
CommandIF cmd = null;
// 標準入力
Scanner scan = new Scanner(System.in);
String input = scan.nextLine();
// 入力コマンドから完全クラス名取得
String className = main.getProperty(input);
// クラスオブジェクト取得
Class<CommandIF> clazz = Class.forName(className);
// クラスのインスタンス取得
cmd = clazz.newInstance();
// コマンドクラスの「execute()」実行
cmd.execute();
・
・
・
}
}
上のように、完全クラス名からクラスのインスタンスを取得する方法でコマンドクラスを取得、実行する形で実装しようとしています。
上記の処理の詳細はこちらの記事を参照してください。
サンプルコードはGitにアップしてあります。
PracticeJava1/Lv3_3_RefactorLv2.java at master · ZenryokuService/PracticeJava1 · GitHub
<実行結果>
クラス図
まずは、初めのメインクラス=TextRPGクラスのクラス図を作成しました。
ここでのポイントは、メインメソッドを持っているところです。
「TextRPG」はクラス名、Properties, firstFlgがある部分はフィールド変数下の部分はメソッドです。
これがクラス図の最小単位になります。このクラスが他のクラスとどのような関係を作り、想定する機能を実現するのか?
これを考えるのが設計になります。
続きは次回に。。。
でわでわ。。。