Java はじめて21 〜オブジェクト指向的分析、アプリの拡張をする〜

今回は、コーダー銀行(コンソールアプリ)の拡張をします。つまりは、機能追加をします。

今までに、以下の内容を実施(記載)してきました。

  1. 作成したアプリの修正
  2. チェック処理クラスの追加

現状の処理としては、コーダー銀行への「入金」と「引き出し」ができるだけであまり役に立たなそうです。
なので、今度はもっと銀行らしく口座の開設機能を作る方向へ向けて機能拡張を考えて見たいと思います。

オブジェクト指向的分析

機能拡張をするときには「どこを拡張するか?」つまり「コードのどの部分をどのように修正するか?」という疑問に答える必要があります。
そこで、今までの作成したものを、確認がてらに見直して「修正ポイント」を探し、拡張するための設計を行いたいと思います。

まずは仕様

「どのようなことを実現するか?」を初めに考える必要があります。そして、今回の場合は「コーダー銀行の口座開設」が実現したいことなので、口座の開設のために必要なことを考えます。

  1. 口座開設している人の情報を保存する仕組みが必要
  2. 口座を持っている人を特定する仕組みが必要
  3. 口座の預金額と口座を持っている人を一意にする仕組みが必要

大まかにこんな感じだと思います。あまり細かいと複雑になりクラス設計がややこしくなるので、今回は学習目的なのでこの程度の仕様にしておきます。

現状の構成を把握

今動いているアプリは下のような感じで動きます。

クラスの構成としては以下の3つがあり、それぞれ「メイン処理」と「預金額管理」、「チェック処理」を担当するクラスになっています。※実際のソースはGitにアップしています。ちなみに、パッケージは下のようになっています。
「jp/zenryoku/apps/atm」

実装ポイント

口座の開設処理を行う前に、現状では「入金」と「引き出し」の機能しかありません。この場合だとコーダー銀行の口座は一人だけで誰でも引き出しができてしまうので安全ではありません(学習ようなので。。。)。1つずつ問題を解消していきますが、まずは口座を開設する機能が必要です。
ユーザー(口座保持者)と口座を結びつける処理などは、後で考えます。

自分は、1度に複数のことを考えることができません。。。

口座開設処理

通常の業務アプリ(〜銀行さんとかで使用しているもの)は、ものすごい人数が利用できるように「データベース(DB)」を使用しています。しかし、DBを使用する前に、「ファイル操作」に関して理解する必要があるのでそのように実装いたします。

ファイルに口座情報を保存する

今回作成する「コーダー銀行アプリ」は学習ようなので本物のように個人情報をてんこ盛りにしたような実装はしません。単純に作成するため必要最低限の項目のみを使用します。それは以下に示します。

  1. 名前(ヘボン式のローマ字)
  2. パスワード

そして、今回実装する処理としては。。。

ファイルにデータを登録する処理

この機能を実装するのには、今までのやり方からすると「ファイルにデータを登録する役割」のあるクラスを作成し、そのクラスに処理を実装する、ということになります。

これもオブジェクト指向の基本になります。くどいようですが、「役割分担をちゃんとやりましょう」ということです。

設計を行う

ここまできたら、察しの良い人は「ファイル操作クラスを作るんでしょ?」と思うかもしれません。その通りでございます。

そして、実装する内容は以下のようになります。

  1. ファイル操作クラスを作成(実装)する
  2. ファイル操作クラスを使用する部分を追加(修正)実装する

補足

自分で作成したものは「自分で好きなように改造できる」ので、想像を膨らませて「面白いもの」を作ってみるのも良い学習になります。

まとめ

上記の内容をまとめると以下のようになりました。

仕様
1. 口座開設している人の情報を保存する
2. 口座を持っている人を特定する
3. 口座の預金額と口座を持っている人を一意にする
機能
1. 口座の情報をファイルに保存する
2. 口座の情報は「名前」と「パスワード」とする
3. ファイルには、カンマ区切りの「CSV」形式でデータを登録する

次回は、ここで作成した仕様に基づき実際にコードを作成(実装)してみようと思います。

でわでわ。。。

div visible=“hidden”>

<ins class="adsbygoogle"
style="display:block"
data-ad-format="fluid"
data-ad-layout-key="-6t+ed+2i-1n-4w"
data-ad-client="ca-pub-7367785927150581"
data-ad-slot="3284986237">