Okapi Project   Web technological site for the beginner... Top

1. 実装レベルへの落とし込み

1.1. クラスの責務と実装

1.1.2 計算式関連クラスについて考える

計算式関連のクラスは、概念クラス図では、「式クラス」、「÷クラス」、「×クラス」の3つで構成されており、 「式クラス」と「÷クラス」、「×クラス」は汎化の関係にありました。汎化について整理してみましょう。

「÷クラス」、「×クラス」とも、以下の共通的な振舞を実装することになります。

1. 2つの数値を受けとる

2. 計算を行い答を返す

3. 計算に使用した2つの値を返す


一方、実際に計算するロジックは双方で別に実装します。


このように、クラスを使う側から見た場合に、異なるオブジェクトに対して共通的なメッソッドを呼び出すことで、それぞれに応じた結果が得られることをポリモルフィズムと呼びます。


ここでは、インタフェースにより、実装させるべきメソッドをサブクラスに強要する方法を取ります。

(1) 式クラス(インタフェース)

責務 計算に関連するメソッドの実装を強要するインタフェース。
属性  
振舞 1. 計算に使用するxを受け取る。
2. 計算に使用するyを受け取る。
3. xとyを元に計算する。
4. 計算した答を返す。
5. 計算に使用したxを返す。
6. 計算に使用したyを返す。
7. 計算に使用した演算子を返す。

(2) ÷クラス(×クラスも同様)

責務 演算を行う。
計算に必要な数値と、答を保持し取り出すことが可能である。
属性 1. x
2. y
3. 答
振舞 1. 計算に使用するxを受け取る。
2. 計算に使用するyを受け取る。
3. xとyを元に計算する。
4. 計算した答を返す。
5. 計算に使用したxを返す。
6. 計算に使用したyを返す。
7. 計算に使用した演算子を返す。
〜ポリモルフィズムでインタフェースを使う理由〜

今回の実装では「2つの数値の受け取り」、「計算に使用した値を返す」の同じロジックを実装したクラスを継承する方法もありますが、あえてインタフェースを使用しています。これは拡張性を高めるためです。たとえば、今後小数点に対応した計算をしたい、新たな計算式を追加したいとなったとき、スーパークラスがロジックを実装していると、拡張が困難になるからです。