C は知っているけれど、Java のオブジェクト指向に挫折した人は、今すぐオブジェクト指向再入門を読みましょう。みんな初めからこう説明してくれればよかったのにと思います。
面白いと感じた人は、今すぐ「Java謎+落とし穴徹底解明」を買いましょう!
Java 謎+落とし穴 徹底解明 (標準プログラマーズライブラリ)
- 作者: 前橋和弥
- 出版社/メーカー: 技術評論社
- 発売日: 2001/12/01
- メディア: 大型本
- 購入: 8人 クリック: 40回
- この商品を含むブログ (21件) を見る
関数呼び出しとメッセージ
ところで、皆様からのご意見(1)にあるboard_put(board, x, y) と board.put(x, y) の違いの議論ですが、「継承を考えない限りにおいては」という条件ではダメだそうです。
前橋さんは関数名と関数の実体を一対一に対応させるためにこの条件にしたのだと思いますが、小田ちゃん曰く、「クラスを1つに限れば」と書かなければいけないそうです。なぜなら、Java なら interface でも多態性が実現できるからです。
たとえば、以下の例を考えて下さい。
interface I { put() } class A implements I { ... } class B implements I { ... }
型 I に対して、put を呼ぶ場合、class A の put か class B の put か分りません。なので、クラスを1つに制限しないといけないようです。
イメージが掴めた後は
前橋さんのページでオブジェクト指向のイメージが掴めた後は、Java 風の継承や interface、あるいは動的にオブジェクトにメソッドを追加できる JavaScript 風のオブジェクト指向のことも考えて、やはり put は「セレクタ」だと考えるのがよいようです。