CUIのゲーム作りに挑戦(Java), 内部設計

記事
IT・テクノロジー
前回、外部設計を行いましたので、それを基に内部設計をしていきます。
内部設計は、システム内部の処理やデータ入出力の動きが分かるように設計する工程です。システムを複数人で開発する場合、チーム内で設計者とプログラマーが別々であったり、プログラミング工程を外注するケースもあります。そのため、他の人がこの内部設計を見てプログラムを作れるものでなければなりません。

今回は全工程を1人でできる内容ですので、簡易的に設計します。内部設計における成果物には、クラス図シーケンス図などがありますので、一例としてそれらの作り方を見ていきましょう。


1.クラス図

JavaやC++など、オブジェクト指向のプログラミング言語で開発する場合、クラス図を作成するとクラス間の関係性や、どんなデータや処理を持っているのかが分かりやすくなります。例えば、先日紹介しました「三角形と正方形の面積を計算」するJavaのプログラムでは、クラス図は下記のようになります。

1.png

三角形と正方形のクラスがそれぞれ面積を計算する操作(=処理)を持ち、図形クラスを継承しているのが分かります。(上図では、getterやsetterの処理は省略し、プログラム起動によって処理開始するMainクラスも省略しています)

また、ここではクラス図の書き方についての詳細は省略します。
UML(Unified Modeling Language)やクラス図で調べてみてください。


それでは、今回のBig or Smallゲームを設計してみましょう。これは人によって作り方が異なりますので、正解は1つではありません。もし私が設計するなら、クラスはこう作るだろうという一例を載せます。

2.png


MVCモデル(Model, View, Controller)で設計してみました。これくらいの規模なら1クラスでも可読性の良いプログラムを作れるかもしれませんが、役割を分けた方が読みやすくなると思います。各クラスの役割は、

・ModelBS:ゲーム上のデータ管理や、勝負の判定など
・ViewBS:コマンドプロンプトへの表示(画面表示)
・ControllerBS:ユーザーからの標準入力の受け取り
        ModelBSとViewBSに命令(処理を呼び出す)

このように分けています。ちなみにクラス名の「BS」は「Big or Small」の略です。


2.シーケンス図

システムの規模が大きくなると、それに伴ってクラスの数が多くなります。システムの動作にはどのようなクラスが使われて、処理はどのように流れているのかを、視覚的に表現するのがシーケンス図です。
今回作るゲームは規模が小さいですが、シーケンス図を作るとしたら下記のようになります。

3.png


クラス名を横に並べて、各々に縦線を引きます。縦線が下に行くほど時間が経過することを表します(上から下へ処理が流れます)。「ゲーム起動」の矢印はゲームをプレイする利用者の操作を表しており、これをきっかけにして処理が進みます。他のオブジェクトを利用するときは、そのオブジェクトの縦線に向かって横に矢印を引き、処理名やメソッド名などを書きます。オブジェクト内で自分自身のメソッドを呼び出すときは、自身の縦線に向かって矢印を引きます。上図はランキング表示処理以降を省略していますが、最終的にはControllerBSでゲーム起動時の処理が完了します。

また、
・betするGoldを入力した時
・Big or Smallの予想を入力した時
・ランキング入りでプレイヤーの名前を入力した時
・再挑戦を入力した時
の場合は処理がどのように流れるのか、全てのシーケンス図を作成しておくのが理想です。もし他のシステム担当者が将来プログラムを改修することになった時に必ず役に立つからです。(今回は省きます)


次回はプログラミングに移っていきます。
サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す