- PR -

StateパターンでのInterfaceの使用について

投稿者投稿内容
tsune
会議室デビュー日: 2002/07/09
投稿数: 15
お住まい・勤務地: 兵庫県西宮市
投稿日時: 2005-01-19 12:22
中西です。

私の言いたかったことは全てFujiwoさんのご説明のなかにあります。
ありがとうございます。

引用:

それから、実装上の問題として、State/Strategy パターンなどが対象としている関心事が、既存のクラス階層と直交する関心事であった場合は、抽象クラスでなくインタフェイスを使います。多重継承できませんから。
これは、「アスペクトの実装を便宜上 (言語の都合上) interface で」というイディオムといえるかと思います。



素晴らしい!まさに仰るとおりだと思います。

[ メッセージ編集済み 編集者: tsune 編集日時 2005-01-19 12:24 ]
Micky
大ベテラン
会議室デビュー日: 2002/09/04
投稿数: 137
投稿日時: 2005-01-19 13:22
Mickyでございます。


引用:

Fujiwoさんの書き込み (2005-01-19 11:27) より:

私の場合ですが、単に、抽象化したいのがクラスであれば抽象クラス、単なる振る舞いに関する制約であればインタフェイス、という感じで使い分けています。



なるほどなるほど…


引用:

但し、実際の設計では、

「State/Strategy パターン」を使おう → じゃインタフェイスを使おう

とはなりません。先ず (リファクタリングの結果としての) クラス設計があって、そこにおける抽象化すべきものがクラスなのか、振る舞いに関する制約なのかの判断があり、結果として「State/Strategy パターン」の形になるだけですから。



やっぱり、その流れが自然ですよね。
ここまでの所を非常にうまくまとめてくださったような感じがします。
m(__)m(自分の表現力、文章力のなさを痛感しつつ…)


単純な「正しい/間違い」と言った領域ではないとは思いますが、
おかげさまで自分の中ではある程度の方針、指針の様なものが
出来てきたような気がします。
[Interface]を使用する機会が増えそうな予感もします(^_^;)
みなさまありがとうございました。

MSDNの説明部分も、結局の所噛み砕いていけば
リファクタリングの流れの中で、留意すべき点を
挙げてくれているという感じなのかな…


[ メッセージ編集済み 編集者: Micky 編集日時 2005-01-19 13:30 ]
vincent
大ベテラン
会議室デビュー日: 2004/07/09
投稿数: 142
投稿日時: 2005-01-19 20:45
私の前回の書き込みについてですが、どうも
「(C#やJavaで提供されている)interfaceを必ず使用します」
と受け取られているような気がします。
これは私の書き方がまずかったと反省しています。

私はInterfaceという語を「オブジェクトが提供(公開)しているもの」
という意味で使いました。具体的には、そのオブジェクトが
publicスコープで提供するメソッドやプロパティのこと、
といえば解りやすいでしょうか。

設計の段階では(実装はひとまずおいといて)オブジェクト同士が
どのようにやり取りをするかを考えますよね。
そのとき必要なのは
「オブジェクトが提供する機能・役割がどんなものであるか」
であって「継承関係」であることが特に必要というわけではありません。

だからまず、外部仕様であるインタフェースをベースに考えて、
候補となるオブジェクト群の動き(実装)に似たところがあれば
抽象クラスという方法で実装しよう、という順番になるわけです。
ですから、ソースコードが具体的にどうなるかは場合によりけりです。

もちろん、クラスの抽象化自体が必要なケースでは最初から抽象クラスを
使って考えていきます。このあたりの議論はFujiwoさんのコメントに賛成します。

ちなみに、InterfaceはVBやC#(.NET)に特有というわけではありません。
言語レベルで直接サポートしている/いないという話でなければ
オブジェクト指向言語ではわりと一般的な話題かと思います。
るぱん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 1370
投稿日時: 2005-01-19 21:30
るぱんです。

気が付いたときにはまたもや終わっている雰囲気・・・。(;^_^A アセアセ
返信が遅れて申し訳御座いません。

気分的にInterfaceとAbstractクラスの使い分けの基準が自分の中で固まった気がします。
御協力頂きました皆様には誠にありがとうございます。



>Mickyさん
また今度飲みに行きましょう。(^^

スキルアップ/キャリアアップ(JOB@IT)