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

[jfriends] Re: Serializableインタフェース




前橋です。

>やっとinterfaceの話しになってきましたね。
>
>リフレクションについてはちゃんと勉強していないのでごめんなさい。

私もちゃんとは勉強していなかったりします(_o_)

>APL では文字列でプログラムを動的に生成して、
>実行関数という「悪魔の関数」で実行させるなんて言うことを
>よくやっていました。

私は逆にAPLはやったことないですが(そういう人の方が多数派だと
思う(^^;)、やっぱり、「悪魔の関数」と言われてしまうよう類の
ものなんですよね。

Beansで、リフレクションを使ってメソッドを呼ぶ、というのは、
他に手段がないですし、直観的にも理解できるのですが、
Serializableの例については...

>>  インタフェースがデフォルトの実装を持てない
>>
>>ことに起因しているわけですよね。
>
>逆に、interface が実装を持たなければならない理由はあるのでしょうか。
>interface って言うのは実装じゃなくて「型」なのでは?

もし、ClonableやSerializableが、

  「デフォルトの実装を持ったインタフェース」

だったとしたら、clone はClonableに付ければいいし、readObject
やwriteObjectはSerializableに付ければいいわけです。Objectの
メソッドにしたり、リフレクション使って無理矢理呼び出すのに比
べれば、はるかに自然です。イベントアダプタみたいなふざけたク
ラスも要りません。

>>そもそも、Javaで多重継承を廃した理由ってのは、何なんでしたっけ?
>
>多重継承が必要な局面というのがよく分かりません。
>多重継承がなくてもコンポジションでほとんど何とかなるのでは?

ほとんど何とかなります。(^^;

コンポジションで保持しているオブジェクトに処理を委譲するため
の「皮」のメソッドを、いくつもいくつも書いてると空しくなって
くることはないでもないですが。

実際、昔のオブジェクト指向の本で、多重継承の例として挙げられ
ていた例って、たいていちょっと不自然なんですよね。

たとえば、「社会人」と「学生」を継承して、「社会人学生」とか。
そりゃクラスじゃなくてインスタンスの属性だってば。

# 今、手元にないですが、吉田某とかいう人の、オブジェクト指向
# 狂詩曲だったかいう本には、さらに変な例が...
## 反復継承については、かのバイブル(と私が思ってるだけ?)の、
## Mayerさんの「Object Oriented Software Construction(邦題:
## オブジェクト指向入門)」第1版 にも、妙な例が載っています。

ただ、上記のような例では、メソッドの実装については、継承した
くなることもあります。

>Ruby にはまだほとんど触れていないのですが、
>グローバル変数があるというのを知ってめげています。
>
>Python は Shift-JIS を使わなければとてもハッピーです。:)

Pythonはやったことないですが、グローバル変数ってありませんで
したっけ? たしか。(記憶不鮮明です。ウソである可能性大)

>なぜ Java に interface があるか、ですが、
>クラスを離れた関数が無いから関数ポインターは無くて、
>interface があるのではないかと思っています。
>(それだけじゃないとは思いますが)

Javaには関数へのポインタはないですが、実行時に、コールするメ
ソッドを切り替えるという意味からすれば、インタフェースだけで
なく、継承時のメソッドオーバライドも関数ポインタ的ですね。

C++のvtbl[]ってのは関数へのポインタの配列ですよね。確か。
Cで無理矢理メソッドオーバライドを実現する場合にも、やはり
関数へのポインタを使います。

Cで、関数へのポインタを使うようなところは、Javaでは、メソッ
ドオーバライドで実現したり、インタフェースで実現したり、だと
思います。

># そう言えば初めて書いた C++ プログラムで、
># 関数ポインターだけのクラスを書いたのを思い出した。^^;
># C の関数のラッパーになるだけのいいかげんなクラスでした。

# 私は X-toolkitからOOPの道に入った邪道プログラマなのでした。

------------------------------------------------------------
  前橋 和弥                             maebashi@xxxxxxxxxx
  中部ソフトエンジニアリング(株)
    〒450 名古屋市中村区名駅4-10-25(名駅IMAIビル 5F)
    Tel:(052)583-4511(代) 内線 252 Fax:(052)583-4566
------------------------------------------------------------