疑りぶかいあなたのためのオブジェクト指向再入門

公式ページのほうにずいぶん前に書いた記事について、こちらで言及いただきました。
聞いたことのあるお名前だなあ、と思ったら、Mewのあの方… 光栄というか、驚きました。
# Mewにはお世話になりました…

以下、返信というよりは、単なるとりとめのない話です。
http://d.hatena.ne.jp/kazu-yamamoto/20071116

C は知っているけれど、Javaオブジェクト指向に挫折した人は、今すぐオブジェクト指向再入門を読みましょう。みんな初めからこう説明してくれればよかったのにと思います。
面白いと感じた人は、今すぐ「Java謎+落とし穴徹底解明」を買いましょう!

ありがとうございます。

ところで、皆様からのご意見(1)にあるboard_put(board, x, y) と board.put(x, y) の違いの議論ですが、「継承を考えない限りにおいては」という条件ではダメだそうです。
前橋さんは関数名と関数の実体を一対一に対応させるためにこの条件にしたのだと思いますが、小田ちゃん曰く、「クラスを1つに限れば」と書かなければいけないそうです。なぜなら、Java なら interface でも多態性が実現できるからです。

ずいぶん前に書いたものなので記憶は曖昧ですが、おそらく書いた際の意図としては「interfaceのimplementsも継承も似たようなもの」的な考えで書いたのかと思います。C++なら継承で書くわけですし、C#なら、interfaceはありますがimplementsする側の書き方はC++と同様ですし。
インタフェースも継承もオブジェクト指向の必要条件かもしれませんが、件の記事で書いている「マルチプルインスタンス」も間違いなく必要条件だと思います。にも関わらず、「オブジェクト指向の3大要素」みたいな話をするときにはなぜかたいてい忘れ去られている。CあがりのプログラマJavaでstaticフィールドを乱用したら、「オブジェクト指向的じゃない!」と怒る人は多そうに見えるのに。そのへんをなんとかしたい、と思って書いたのが「疑りぶかいあなたのためのオブジェクト指向再入門」です。当初は継承とかの話まで進もうかと思ったのですが、そのあたりの解説はいくらでもあるので、どうもモチベーションが続きませんでした。
ところで、入門書とかを書くにあたりインタフェースと継承のどちらを先に説明するかは難しい問題だと思います。
ちょっと前の入門書だとたいていは継承が先で、インタフェースは「機能制限版の継承」本によっては「多重継承の粗末な代用品」的な扱いを受けることすらあります。「Java謎+落とし穴徹底解明」でも継承を先に説明しましたが(構文の説明はそのほうがやりやすいと思えたため)、後にJavaWorldで連載を書いたときにはかなり迷いました。当時JavaWorldでは、別の著者の方が「インタフェースの方が本質的だからインタフェースを先に説明する」とおっしゃっていて、真似するのもいやだなあ、ということで継承を先にしたように思いますが、インタフェースの方が重要だとは私も思います。なんでJavaのGraphicsやStrutsのActionはインタフェースじゃないのか。

前橋さんのページでオブジェクト指向のイメージが掴めた後は、Java 風の継承や interface、あるいは動的にオブジェクトにメソッドを追加できる JavaScript 風のオブジェクト指向のことも考えて、やはり put は「セレクタ」だと考えるのがよいようです。

「疑りぶかい〜」についての反省でもあるのですが、「オブジェクト指向」を語るのであればやはり言語は特定したほうがよいのではないかと思うのですが、どうでしょうか。
Rees Re: OOより。

つまり、「オブジェクト指向」というのはちゃんと定義された概念ではない。ある人々 (AbelsonとSussman?) はLispオブジェクト指向だと言うが、それは {3,4,5,7} に基づく (但し、全ての型はプログラマの頭の中に存在するとする)。 Javaは {1,2,3,7,8,9} があるからオブジェクト指向だ。 Eは {1,2,3,4,5,7,9} と6のほとんどをもつから、もっとオブジェクト指向だと言えるかもしれない。だが 8 (サブクラス) はEのゴールには反するもので、オブジェクト指向にとって必要なものとはみなされない。

ひとことで「オブジェクト指向」といっても言語ごとにその定義は違うので、全言語に共通な「オブジェクト指向の本質」的な議論はあまり意味をなさないのではないかと、(今となっては)思います。仮に「本質」があるとしても、特に初心者に説明するのが目的であれば意味がないというか。ところで「Rees Re: OO」のリストの中にもマルチプルインスタンスに相当する項はありません。があん。