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で今までの経緯をまとめて投稿しようかな。
この記事が気に入ったらサポートをしてみませんか?