[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends:00280] Re: イベントリスナなどでの interface



 〜 12月1日新しいビジネスが始まる!ビジネスも楽天、楽天ビジネス誕生 〜
         ●●●●●●●●●●●●●●●●●●●●●●●●●●●
         ● サービスリリース第一弾!ビジネスサービス商談市場 ●
         ●●●●●●●●●●●●●●●●●●●●●●●●●●●
〜〜〜〜〜 今すぐアクセス! http://business.rakuten.co.jp 〜〜〜〜〜
----------------------------------------------------------------------

> >> >クラス継承は「is a」「具象化」を表現しますが、
> >> >インタフェース実装は「クラス外部との窓口の設置」「役割の付与」です。
	:
> 私はis-aを勘違いしている可能性が高いです。一般的なis-a/has-aはクラスの構
> 造の話なのでしょうけれど、私は「この(パトカー)オブジェクトは車である」と
> いえた場合、車クラスがinterfaceであってもis-aと考えてしまっています。

構造として class を使おうと、interfaceを使おうとも、
パトカーと車の関係は is a だと思います。

で、is a の関係を、interface 実装で表現しなければならないハメになったら、
そのクラス階層設計に誤りがあるので見なおす、という方向に考えが進みます。

クラスとする場合、形質の不変性が重要だと思うので、覆面パトカーや、
警官をのせて捜査に協力する一般車両の存在を考慮するならば、
パトカーはクラスではなく、「車 has a 交通取締り権」というデザインの
方が適切という考え方もあります。
交通取締り権は、interface にしたいわけですが、Javaではinterfaceを
動的にアタッチ・デタッチ出来ないので、その辺りが悩ましいところです。

> 後者なら理由に興味あり、です :)。

後者です。「多重継承ではやりません」というより「なじみません」
という感じでしょうか。

多重継承は、異なる概念でそれぞれ発達したクラス階層の末端を
合成する場合に有効な手法です。
# 似たような概念のクラス階層なら再設計して統合してしまえば良い

GUIウィジット←アイコン←カウボーイアイコン
             ↓
ゲームキャラクタ←カウボーイ 

アイコン側に、描画を行うdraw()という抽象メソッドがあり、
カウボーイ側に射撃を処理するdraw()という具象メソッドがあった場合、
多重継承にてカウボーイアイコンのアイコンとしての抽象メソッドdraw()が、
カウボーイのdraw()メソッドを実装として受け入れてしまっては困ります。
こういう場合はエラーになって欲しいわけです。

-- 
/** 久野 浩 - Hiroshi Kuno */