systembankスタッフのブログ

システムバンクスタッフのブログです。

インターフェイス その2

インターフェイスにできて抽象クラスにできないもの 

インターフェイスは共有できる機能の定義のみを行うことになっているので、1つのクラスに複数のインターフェイスを持たせることができます。抽象クラスを継承した具体クラスは複数作ることができますが、その逆に複数の抽象クラスを継承した派生クラスを作ることができません。

これがインターフェイスの大きな特徴であり、メリットです。

抽象クラスにできてインターフェイスにできないもの

抽象クラスにはメソッドの実体を記述することができますが、インターフェイスは定義なのでメソッドの実体を作成することができません。

実装のポイント

これらが抽象クラス、派生クラス、インターフェイスを設計するポイントになります。

まとめると実装の仕方の抽象クラス、派生クラスの関係の中で定義し実装し、インターフェイス定義に応じてクラス内にインターフェイスの実体を実装します。

そしてクラス利用側にはインターフェイスインターフェイス生成ファクトリを提供し、クラスそのものは隠蔽するといった実装をすることが多いと思います。

この考え方は依存性の注入といった設計・実装の考え方につながり、テスト駆動型開発を行うとき、威力を発揮します。

インターフェイスの定義を早く決めておくことでクラスを利用する側、クラスを作成する側での依存性がインターフェイスのみになり、それぞれ独立してプログラムを作成することが可能になります。

その場合、互いのプログラマは自身のプログラムのテストを行うためのスタブ(モック)を作成しテスト可能な状態を作ります。

プログラムを作成する規模が大きくなるほど恩恵を受ける考え方なので、インターフェイスを決めることをプログラミングの癖として身に着けることが大事だと思っています。

余談ですが、仕事でのコミュニケーションなんかも同じですね、コミュニケーション手段をあらかじめ決めておくことが円滑に仕事を進めるコツだったりしますよね。

次回

インターフェイスジェネリッククラスを使用した例を交えて利用方法を説明してみようと思います。