TDDで電卓アプリを実装する日記#8

はじめに

今回でおおよそすべての機能が実装できたから一区切り。

今回の実装範囲

今回実装するToDoリストは以下の通り
・正負反転の符号の実装
・GUIへの紐付け
・最後の入力の取り消し(忘れてた)

正負反転の符号の実装

符号の変換は数字に対して行い機能だからValueKeySequence.addKeyの引数に取れるタイプのクラスにしたい。
だけど今までの数字キーとは処理が全く異なるから、前回のLockedSequenceクラスのような継承を使った処理は無理そう。

この場合は、「後ろにこのKeyがあった時の値の返し方」の振る舞いを新しく作り、ValueKeySequenceに格納できれば良さそうだ。
それを示すインタフェースと、ValueKeyに正負の情報を格納できるようにすることと、正負をひっくり返す処理を持つキーを作って対応した。

GUIの紐付け

今まで、「キーを受け取る数式クラス」と、「文字列からキーを生成するファクトリ」から処理を開始するようにしていたので、GUIへの紐付けはかなり単純にできる。

ただ、一度に入力できる文字の9桁制限を超えている、という例外は特に何も出さなくても問題なさそうだけど、0除算は「0除算しています」って書いたほうが良いかもしれない。

まずは自分で作った例外はスーパークラスから継承する形にして、意図していない例外はキャッチしないようにしておき、その上でダイアログを出すかどうかは特定のインタフェースを実装(一行も「実装」していない場合も実装と言えるのだろうか?)しているかどうかで書き分けるか。
そうした結果、GUIの実装部分はこんな感じにかなりシンプルにできた。GUIと計算部分をなるべく疎結合にできたので、これを「GUIじゃなくて〇〇にして」と言われてもあまり支障は出ないはず。

	public void actionPerformed(ActionEvent e) {
		String inputButtonCommand = e.getActionCommand();
		try {
			formula = formula.addKey(Key.createFromString(inputButtonCommand));
		} catch (FormulaException e1) {
			if (e1 instanceof IStopCalculationException) {
				JOptionPane.showMessageDialog(contentPane, e1.getMessage());
			}
			else {
				System.out.println(e1.getMessage());
			}
		}
		digitWindow.setText(Long.toString(formula.getResult()));
	}

こうして実装が一通り済んだ状態が下記のリンク。次の勉強会も近いし一旦ここで止めておこう。

次回はQiitaで今までの経緯をまとめて投稿しようかな。

この記事が気に入ったらサポートをしてみませんか?