【前回のあらすじ】
コードがとってもスパゲッティ化してますorz
というわけで、今回はリファクタリング。
まず、これまでは入力状態と計算状態を同じ基本クラスVirtualStateから派生していたのを、入力状態はIInputStateインタフェイスを実装したクラス、計算状態はICalculateStateインタフェイスを実装したクラスに分けました。
次に、画面で状態を保持して管理していたのをやめ、新たに状態管理用のStateManagerクラスを作成して入力状態、計算状態、表示文字列、入力数値を管理するようにしました。これにより画面からは余分なコードがなくなり、基本的にはStateManagerのメソッドを呼ぶだけになりました。
最後に、実際の計算ロジックと数値を表示文字列に変換する処理を共通化するため、CalculatorCommonクラスにstaticメソッドとして定義し呼び出すように修正しました。
なお、入力状態の状態遷移をその1で作成したものから見直し、以下のようなものにしました。
変わったのは以前は0だった状態を未入力としたことと、=、計算、クリアボタンを押下した際、未入力状態に戻るようにしたことの2点です。
#上記内容の詳細はソースをご覧ください。WankumaCalculator2_070712.zip
さて、今回までで大体形にはなってきました。今のところ仕様の1,2,3,4,5,6が満たせたかな?
あと1つ残ってますが、√の計算が残っているので、これを次回作って仕様の12を満たすことでOKということにします。
ついでに、0除算、桁あふれチェック処理と、%の計算も次回やってみます。