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

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



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

In article <3A39671D.35519F78@xxxxxxxxxxxxxxxx>
Hiroshi Kuno wrote:
>> abstract classにしておけば任意のクラスに付けられることが無くて
>> イベントリスナの独立性を高められたのにぃという主張もあります^^。
>
>イベントリスナ自体が JDK 1.1 での後付けですし、
>1.0 のイベント処理モデルからの移行を配慮すると
>仕方ないかなぁと思います。

ふーむ。そういう考え方もありますねぇ。私はdelegation event modelはいまま
でのオーバーライド方式とは違うんだということを強調した説明が多いので、逆
にイベントソース自身がimplementsしてそのクラスにハンドリングメソッドを実
装出来る現状の仕様は邪魔だったんじゃないかなあくらいの思いです。
確かに過去のソースの書き替えを少なくできますねぇ。

action(Event ev) -> actionPerformed(ActionEvent ev)
                    + implements ActionListener

でも、この書き替えは奨められるものじゃないですし・・・。

action(Event ev) -> action(ActionEvent ev)
+
初期化部分に以下を追加
addActionListener(new ActionListener() {
    puvlic void actionPerformed(ActionEvent ev) {
        action(ev);
    }
});

で、ActionListenerがabstract classであってもよし、ということでそこまで大
きな理由じゃないかなあと。
# これもさしてよい書き替えじゃないですけど^^

>> >クラス継承は「is a」「具象化」を表現しますが、
>> >インタフェース実装は「クラス外部との窓口の設置」「役割の付与」です。
>> 
>> 応答可能性の付与はそのとおりですが、継承は「is-a」ですが〜というのは私と
>> は違うようです。(interfaceの実装も「is-a」「具象化」を表現できると思って
>> るので)
>
>interfaceを制限付きのabstract classとして使えば、
>確かに interfaceの実装で「is a」を表現することも可能ですが、
>それなら素直に abstract class にした方が自然な感じがします。
>
>それとも、クラス設計において多重継承が最も適切な場面において、
>その身代わりにinterfaceを使う場合を想定してのことでしょうか。
>その場合に限定するなら「is a」の表現に使っても良い、という考えに賛成します。

私はis-aを勘違いしている可能性が高いです。一般的なis-a/has-aはクラスの構
造の話なのでしょうけれど、私は「この(パトカー)オブジェクトは車である」と
いえた場合、車クラスがinterfaceであってもis-aと考えてしまっています。
(字面とおりにしかとっていない^^)
つまり、その型を持つ=その型の持つ機能の全てを持っている=is-aという単純な
理解の仕方です。
でもその理解だと構造がhas-aであっても表面上はis-aであるというケースが出
てしまって変なんですね(なのかな?実はそれでもいいんじゃないとまだ思ってま
す^^)。
# 静的型付き言語前提にしてるなぁ

># やっぱりJavaに多重継承が欲しいなぁ。
># C++ にはinterfaceが欲しいけど。

うーん。私はほしいと思うほど複雑な構造のプログラムを作ったことがないらし
い^^(揶揄じゃなくて)。

>>「多重継承ではやりません」はちょっと"?"ですけど^^。
>
>すみません、上記の部分はよくわかりませんでした。
>文書表現が "?" ということでしょうか。
>技術的に "?" な部分があるということでしょうか。

私が意図をつかめなかったという意味で"?"でした^^。
# 多重継承の有効な利用方法を解ってないせいと思います。

「多重継承ではできません」なのか「多重継承を使う場面では不要(多重継承を
サポートする言語で積極的にそれを使うプログラミングスタイルでは使わない)
」なのかかなあ。前者ならあっさり納得です。後者なら理由に興味あり、です
:)。


-- 
木下 信@イデア
うーんやっぱりJavaにどっぷりつかってしまっているかも^^;