Java Mid Basic 〜Lv3_1_Javaの基本(リファクタリングLv2)ゲームループ付き

イントロダクション

前回は、リファクタリングをやり、メインメソッドを整理しました。ここまで来た方、おめでとうございます。

ここから、オブジェクト指向プログラミングの始まりです。

今迄の事がわかれば何かしらの処理を自分で考えて作れるレベルになっていると思います。でわ、ここから何をやるか?ですが、基本の更に深いところ、オブジェクト指向について理解していこうと思います。

オブジェクト指向

オブジェクト指向については、色々な書籍があり、色々な事が書かれていますが、ネコとかイヌを例に出しているものは、混乱すると思います。(自分はハマりました(笑))

クラスの書き方をしたのように図にして見ました。ズバリUMLになります。

![](http://zenryokuservice.com/wp/wp-content/uploads/2019/08/スクリーンショット-2019-08-23-20.49.49-300x222.png)

「オブジェクト指向ってなによ?」という疑問がはじめに出てくると思います。諸説ありますが。。。

早い話が

「プログラムの資源を現実にあるモノ(オブジェクト)と同じように扱う(考える)ためのコードの書き方(考え方)」です。

具体的

プログラムを眺めてみると、1つのファイルに1000行を超える様なデカイ、ファイルになっているものがあったりします。申し訳ないがこういうプログラムは「オブジェクト指向」していません。何故か?再利用出来ないからです。

まずは概念

プログラムの動き、目に見えないので大雑把な概念からイメージの輪郭を拾います。この概念を理解するのにわかりやすいのがUMLだと思うのでUMLのクラス図を例に出したいと思います。

UMLの細かい部分に関しては下のリンクを参照下さい。

UMLツール Star UML〜ユースケース図を書いて見た〜

クラス図の書き方

オブジェクトの基本単位

Java言語の場合、オブジェクトの単位はクラスです。もっと言うと、全てがクラスで表現されます。だからオブジェクト=クラスで考えて良いです。

上のリンクは、UMLのユースケース図について記載しています。そして、クラス図の書き方も隣のリンクに記載しました。

早い話が、プログラムをどのように使うか?(ユースケース)とどんな構成で作るか?(クラス図)を絵にしたものがUMLです。

準備

オブジェクト指向プログラミングの準備として、どんなクラス構成でやるか?(プログラム・デザイン)を考えます。こんなデザイン(設計)、あんなデザイン…と最も美しい(効率の良い)デザイン(設計)をやります。もちろん「完璧なデザイン(設計)」は存在しないので、現時点での最高のもので良いと思います。

実装

準備の段階で作成したデザイン(設計)を元にコーディングを行います。

今回は、メインメソッドを整理した状態で再実装(リファクタリング)します。注意点は以下の通り。

  1. 作成したオブジェクトは再利用出来るように作る
  1. 各オブジェクト間の依存関係を分断してやる。なるべく「このクラスを使う時はあのクラスも必要…」とならない様にする

あとは「リーダブルコード」を読みましょう(笑)

おススメです。

コーディング開始

とは言っても、即コードを書くわけではありません。まずはコードを眺めます。そして、前回作成したメインメソッドを全体の流れとして考えます。

  1. 無限ループを作る
  2. プロパティファイルから値を取得
  3. 値が取得できない時は初めの実装の処理
  4. byeコマンドでコマンドリストを出力しアプリ終了

この部分はメインメソッドで実装してます。

本題

オブジェクト=クラスの構成とつかい方に関しては、下のリンクに記載しているので。。。

自作クラスの使い方(呼びたし方について記載します。

まずはしまめに、『クラスを使用する時にはまず「new」します。』という考えを捨てて下さい。必要なので「new」するという事です。

new演算子

クラスをインスタンス化するのはクラスに初期化処理が必要で、同じクラスを複数人で使用したい時など、クラスをnewします。

<例>

サーバーにユーザがアクセス、ログインした場合、LoginUserクラスをインスタンス化しない場合、LoginUserクラスはずっとユーザデータがセットされないので、クラスと言う型が存在しているだけになります。

しかし、インスタンス化してやるとユーザデータがセットされ1つのインスタンスとして存在できるので、サーバーのメモリが許す限り、ログインしたユーザを識別する事が出来ます。

まとめ

大雑把で良いので「クラス」「オブジェクト」という概念に対する偏見(ないのがベスト!)を捨てることができれば、おっけ!です。次回からは実際のコードと実行結果などを見ながら学んでいきたいと思います。

でわでわ。。。