導入
オブジェクト指向の学習をしています。連載第13回と14回では、
展開
新しいクラスを作成する方法は、
- 独立したクラスを作る
- 別のクラスを継承するクラスを作る
- インタフェイスを実装するクラスを作る
- 別のクラスを内包し委譲をするクラスを作る
いずれの方法をとるにせよ、
1.~4.の方法を学ぶために、
テーマ:データファイルを読み込むクラスを作成する
「テキスト形式のデータファイルから設定情報を読み込むクラスを作る」
今回はこのテーマを達成するために、
独立したクラスを作る
まずは最も単純に、test
メソッドの中で目的のクラスのインスタンスを作成し、
では、AppInfoLoader.
として書きましょう。次の手順にしたがってProcessingのIDEで新しいタブを作成してください。
- IDEに表示されている
TestAppInfoLoader
タブの隣にあるドロップダウンメニューボタンをクリックし、New Tabを選択します。ファイル名は AppInfoLoader
とします( .pde
は打ち込む必要がありません。IDEが自動で追加して保存します)。
AppInfoLoader
として、
ここで今回読み込むデータファイルを次のCONFING.
とします。このファイルは、
[作業] CONFIG.
を読み込むコードと、getVersion
を書きましょう。これはCONFIG.
に記録されているバージョンナンバーを文字列で返すメソッドです。ファイルの読み込みにはloadStrings
メソッドを使いましょう。ファイル名はAppInfoLoader.
、TestAppInfoLoader.
としてください。この作業を今回の演習1とします。
最終的に、AppInfoLoader.
は次のように書けます。
このAppInfoLoader.
はTestAppInfoLoader.
のスケッチフォルダ内に配置してください。CONFIG.
はAppInfoLoader.
を読み込んだProcessingのIDE上にドラッグ&ドロップしてください。
実装が異なる別のクラスを作成する
次に、
たとえば、AppInfoLoader.
ではloadStrings
メソッドを使いましたが、BufferedReader
クラスを使います。そして将来のためにAppInfoLoader
クラスをそのまま残しておきたいならば、
ここでは、BufferedReader
クラスを使ってAppInfoLoader2
クラスを書いてみましょう。
[作業] CONFIG.
を読み込むコードと、getVersion
を書きましょう。ファイルの読み込みにはBufferedReader
クラスを使ってください。ファイル名はAppInfoLoader2.
としましょう。テストコードはTestAppInfoLoader.
に追加しましょう。先ほどのテストコードと区別するために、TestAppInfoLoader2.
とファイル名を変更しましょう。これを今回の演習2とします。
- 注
AppInfoLoader2
というクラス名はよくありません。AppInfoLoader
とどう違うのか、名前から判断できません。これらのクラスを使うコードの文脈から、 それぞれのクラス名を再検討するべきです。
AppInfoLoader2
クラスと、
メソッド名と戻り値、AppInfoLoader2
クラスは、try...
節で例外の内容をコンソールに出力することしかさせていませんので、BufferedReader
クラスを使った価値がありません。Processingで用意されている便利なメソッドを利用せずに、
新たに独立したクラスを作成する利点
十分小さいコードならば切り分けないほうが見通しが良い
今回は、setup
メソッド内に記述しても構わないのです。新たにクラスを書くということは、
1画面に収まらないコードは切り分けると見通しが良くなる
一画面に収まらないほど長いコードはクラスに切り分け、
隠蔽とカプセル化
大枠を見ているときに、
オブジェクト指向プログラミング言語はプログラミングを楽にする道具立てを持つ
クラスを作るというステップの精神的敷居を超えてしまえば、
演習
「展開」
まとめ
- 独立したクラスの作成手順を学習しました。
- 新たにクラスを作成する利点を紹介しました。
- オブジェクト指向の便利な仕組みである隠蔽とカプセル化を紹介しました。
学習の確認
それぞれの項目で、
- 独立したクラスの作成手順が理解できましたか?
- 理解できた。気持ちよく納得した。
- 理解できた。しかし、
今ひとつスッキリしない。 - 理解できない。
- 新たにクラスを作成する利点が理解できましたか?
- 理解できた。気持ちよく納得した。
- 理解できた。しかし、
今ひとつスッキリしない。 - 理解できない。
隠蔽とカプセル化の利点が理解できましたか?
- 理解できた。気持ちよく納得した。
- 理解できた。しかし、
今ひとつスッキリしない。 - 理解できない。
参考文献
- 『本格学習Java入門[改訂新版]』
(佐々木整 著、 技術評論社) - Java言語の基本的な文法が良くまとめられています。また、
大変広い範囲をカバーしているので、 はじめてJava言語に触る方が、 Javaがどんな言語なのかを知るために役立つ資料になるでしょう。
- Java言語の基本的な文法が良くまとめられています。また、
- 『ずばりわかる! Java Javaの良いコード、
悪いコード (日経BPパソコンベストムック)』(日経ソフトウエア 編著、 日経BP社) - 日経ソフトウエア誌に掲載された特集を集めたムックです。2006年発行と少々古くなりましたが、
各トピックともにコンパクトにまとまっており、 Java言語でコーディングをする際の具体的な指針やその例が掲載されています。
- 日経ソフトウエア誌に掲載された特集を集めたムックです。2006年発行と少々古くなりましたが、
演習解答
解答のコードは
ただし、
- 設定情報ファイル
CONFIG.
がTXT CONFIG.
になっても良いように、DAT AppInfoLoader
クラスに設定情報ファイル名を受け取る引数付きのコンストラクタをつける。 - 設定情報ファイル名を受け取るメソッドをつける。
- 設定情報のデータの区切り文字が、
コンマではなく空白文字等任意のものを指定できるようにする。 - 2つの
AppInfoLoader
クラスのクラス名を、機能に応じたよりふさわし名前に変更する。