アカウント名:
パスワード:
実装を定義できたら抽象クラスと同じじゃないだったら最初からinterfaceなんか作らずにclassの多重継承を認めればよかった
>たとえばUNIXはすべてをファイルのように扱えるようにしている(インターフェース)が、インターフェイスの文脈でいうのなら、「ファイルのように扱える」は間違い。「ファイルハンドルでアクセスできる」でしょ。
>デバイスやプロセスは結局のところファイルではない。当たり前。「ファイルハンドルでアクセスできる」というインターフェイスを実装した全く別のクラスだから。
インターフェイスは直行性があって、クラスは直行性がないことを言いたいんだろうけど、例えが不適切なせいで、内容が伝わらない。
C++から見ると、操作方法が同じだけならテンプレートでいいじゃんとなる。必要のメソッドを実装してさえいれば全く無関係のクラスを受け取れる。わざわざクラスに継承関係を加える必要がない。
そんなに大きな主語の話ではないと思います。(この場合、大きな主語だから悪いとか非難してる話では無いです。)
C++だと、どのクラスか付記すれば関数はどこでも書けますが、Javaだと、Classの波括弧の中にしか書けません。それでは不便なので、別のところ(インターフェースの波括弧の中)にも書ける様にしたというだけでは無いでしょうか?
もちろんC++みたいに、どこでも書ける様にすればより柔軟性が増すでしょうけど、それではJavaの挟持に反するというものでしょう。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
ナニゲにアレゲなのは、ナニゲなアレゲ -- アレゲ研究家
インタフェースへのデフォルト実装はキモい (スコア:1)
実装を定義できたら抽象クラスと同じじゃない
だったら最初からinterfaceなんか作らずにclassの多重継承を認めればよかった
Re:インタフェースへのデフォルト実装はキモい (スコア:0)
私の感覚ではクラスとI/Fは意味的に違うのでメソッドをもったからクラスでいいじゃないかという感覚はないなぁ。
クラスは関連性があるがI/Fは関連性はない(操作方法が同じだというだけ)。
たとえばUNIXはすべてをファイルのように扱えるようにしている(インターフェース)が、デバイスやプロセスは結局のところファイルではない。なのでデバイスやプロセスの親クラスとしてファイルを据えたくない。「is-a」の関係性でいえば「プロセス is not a ファイル」だから。
「それ多重継承でも同じことを実現できるよ」という話なら「たしかにできるね」というのは違いないんだけどね。
ジェネリックインターフェース作ってると<T>の親クラスが決まっている場合があるので、そういう場合なんかはI/Fに実実装書きたいなぁと思うことがある。
実際どうなってるのかまだ調べてないが、親クラスとI/Fで同じメソッドが実装されていた場合の力関係はわかりやすいかもしれない。
でも I/Fにキャストした場合はどうなるんだろ。
Re: (スコア:0)
>たとえばUNIXはすべてをファイルのように扱えるようにしている(インターフェース)が、
インターフェイスの文脈でいうのなら、「ファイルのように扱える」は間違い。「ファイルハンドルでアクセスできる」でしょ。
>デバイスやプロセスは結局のところファイルではない。
当たり前。
「ファイルハンドルでアクセスできる」というインターフェイスを実装した全く別のクラスだから。
インターフェイスは直行性があって、クラスは直行性がないことを言いたいんだろうけど、例えが不適切なせいで、内容が伝わらない。
Re: (スコア:0)
> 「ファイルハンドルでアクセスできる」でしょ。
違う。UNIXの設計思想としてファイルであるかのように振る舞うのがUNIXらしさである。ファイルハンドルを介するなど手段に過ぎない。
>>デバイスやプロセスは結局のところファイルではない。
> 当たり前
伝わってるじゃない。
Re: (スコア:0)
Re:インタフェースへのデフォルト実装はキモい (スコア:1)
Re: (スコア:0)
C++から見ると、操作方法が同じだけならテンプレートでいいじゃんとなる。
必要のメソッドを実装してさえいれば全く無関係のクラスを受け取れる。わざわざクラスに継承関係を加える必要がない。
Re: (スコア:0)
そんなに大きな主語の話ではないと思います。(この場合、大きな主語だから悪いとか非難してる話では無いです。)
C++だと、どのクラスか付記すれば関数はどこでも書けますが、Javaだと、Classの波括弧の中にしか書けません。
それでは不便なので、別のところ(インターフェースの波括弧の中)にも書ける様にしたというだけでは無いでしょうか?
もちろんC++みたいに、どこでも書ける様にすればより柔軟性が増すでしょうけど、それではJavaの挟持に反すると
いうものでしょう。