Java はじめて18 〜設計後の部品を実装する2〜

イントロダクション

役割分担などのクラスを扱う、プログラム設計をする。ということをやってきたので、今度は実際にプログラムを作成しながら
設計から実装までをやって見たいと思います。

そのため、前書きというか能書きが長くなります。申し訳ない・・・

設計したプログラム

設計したプログラムは「コーダー銀行アプリ」です。単純に標準入力から金額を入力してそれを保持します。
お金を入金すれば、加算され、引き出せば減算されるというようなプログラムです。

このプログラムの実装には、以下のクラスを使用しています。※Githubにソースがあります

  • MainBankクラス: メインメソッドがある、プログラムを起動するクラス
  • Calcurationクラス: 細かい計算などを行うためのクラス
  • InputCheckerクラス: 入力値などをチェックするためのクラス

それぞれ上のように役割分担をしました。

MainBankクラスの設計

  • このクラスは、メインメソッドを実行しATMの機能を実装したatm()メソッドを起動する。
  • atmメソッドは、以下の処理を行う
    • ATMの受付表示
    • ATMの終了・入金・引出し操作

Calcurationクラス

  • このクラスは、ATMに貯金されている金額の管理を行う ※預金額は1000円スタート
  • 入金処理と引出し処理を行う

InputCheckerクラス

  • このクラスは、入力した値が適当かどうか判定する

設計後の実装

今回は、部品の設計を行った後の、実装を行います。(設計で)作成したクラスは以下の通りです。

  1. MainBankクラス
  2. Calcurationクラス

オブジェクト指向Lv1

オブジェクト指向で作り始めるとだんだん話が大きくなってしまうので、ここでは小さく、わかりやすく実装しようと思います。
作成するクラスは上記の通りですので、これらをシンプルに実装します。

MainBakクラス

メインメソッドは、以下になります。

public static void main(String[] args) {
    MainBank main = new MainBank();
    main.atm();
}

2行で終わりました。。。デワデワ。。。

というのは冗談として、最終的なソースはGitにコミットしておきます。(本当はPUSHですが。。。)
ここまできたら、あとは創意工夫がモノを言うので、ここでは実装した結果を記載したいと思います。

作成したコード

部品一覧

一覧と言っても、2つのクラスしかないので、大したことはないのですが、簡単に説明だけつけておきます。

MainBankクラス
・メインメソッ: このクラスのatm()メソッドを呼び出します。これだけです。
・フィールド: cal=Calcurationクラス
・コンストラクタ: 引数なしのコンストラクタで、Calcurationクラスのインスタンスを生成する
・atm()メソッド: コンソール表示を行い、入金、引き出しのどちらかの処理を呼び出す。
そして、想定外の入力があった時はエラーメッセージを出力してサイド入力を促す
Calcurationクラス
・フィールド: 預金額を保持
・預金額のGetterとSetterを持っている
・入金・引き出し処理メソッド: 第二引数のbooleanで入金か引き出しか判定する。あとは入金なら足し算、引き出しなら引き算を行う。
他のメソッドは細かい入力チェック、計算処理

これらのクラス関係

MainBankクラスはフィールドにCalcurationクラスを持っている。このクラスがアプリケーションのメインを担当する。

これに対して、Calcurationクラスは、入金、引き出し処理の担当を行い。フィールドには預金額を保持するようにしている。入金、引き出しの処理で預金額が加算されたり、減算される。

コンストラクタについて

コンストラクタはクラスのインスタンスを作る(newする)ときに動くメソッドのようなものでクラスの初期化を行う。
そして、引数のあるなしによりコンストラクタは区別される。

具体的には下のようなコードです。
```java
public class MainBank {
MainBank() {
// コンストラクタA
}
MainBank(int yokingaku) {
// コンストラクタB
}
}
```

上の2つのコンストラクタはJVMによって区別されます。つまりは、両方とも定義(コードに書くことができる)ということです。
例えば、メインメソッドでコンストラクタを呼び出したときに処理が走る場所が変わります。サンプルコードをいかに記載しいます。

```java
public static void main(String[] args) {
// コンストラクタAが起動する
MainBank main = new MainBank();
// コンストラクタBが起動する
MainBank main = new MainBank(1008);
}
```

このようにコンストラクタを複数作るのは、初期化するパターンを何個か作成したいからです。
もし、「このパターンはいらんな。。。」という場合はこのようにコンストラクタを複数作らなければ良いのです。

そして、上のように「引数あり」と「引数なし」のコンストラクタ(メソッド)を作成することを「**オーバーロード**」と言いいます。
のちに、「**オーバーライド**」という言葉も出てくるので混同しないようにしましょう。

とりあえずは、クラスを作った後に、どのようにしようするのか?という部分について記載しました。今後は、作成したクラスにいろいろな使い方ができるように、次のものを学習していきます。

* コンストラクタ
* インスタンスとは?
* クラス・メソッドの呼び出し方

でわでわ。。。

<<< 前回 次回 >>>

<Java関連の動画リスト>