新・闘わないプログラマ No.303

疑りぶかい私


もう1ヶ月以上も前のことになるのでいまさらここで取り上げるのも、と思わないでもないのですが、前橋さん「疑りぶかいあなたのためのオブジェクト指向再入門」というのを公開されています。タイトルからしてかなり刺激的かも知れませんが、これを見た瞬間「こ、これは、もしかして私のためにあるような…」と思ってしまいました。
最初の解説に、

このページは、「オブジェクト指向入門」とあるように、オブジェクト指向を勉強しようとして挫折した人向けの文書です。

とありますが、これってやっぱり私のこと? あはははは。いや、その、別に挫折したのかどうかはわからないですが、というかそもそも「勉強しようと」したのかどうか…その前橋さんの「Java謎+落とし穴徹底究明」(技術評論社刊)という本も買ったはいいけど、あまり読んでなかったりするし。
いやまあ、JavaでもC++でもRubyでもなんでもいいのですが、とにかくそういう方面の言語を使うような仕事をしてないのでして、仕事で使わないとなかなか覚えられないものなんですよね(←いいわけ)。あ、でも「別にCでだって出来るじゃん、いいよいいよ、Cでごりごり書いちゃえ」とか、そういうふうにしちゃっているような気も…だから、いつまでたってもそっち方面の仕事が出来ないもかも知れませんが。

というわけで、疑りぶかい私のための…じゃない、「疑りぶかいあなたのためのオブジェクト指向再入門」を読ませていただきまして、再入門などさせていだだきました。
前橋さんは結構刺激的(という表現が的確かどうかはわかりませんが)な書き方することがあるので、賛否両論を巻き起こすことがありがちですけど、私は前橋さんの書く文章のそのあたりが結構好きです。「わははは、ここまで言い切っちゃうと反論多数だろうなあ」とか、「それ、2ちゃんねるあたりの住民を煽ってないかい」とか。
で、私は内容を批評できるほどオブジェクト指向もJavaも詳しくないので、ここではいくつか思ったことだけ書いてお茶を濁そうか、などと思います。
まず、「なぜわからなくなってしまうのか?」のページから、

オブジェクト指向の入門書では、「謎のたとえ話」から始まるものが多いように思います。
典型的な例は、はじめにでも挙げた、「哺乳類を継承して犬と猫を作り、『鳴く』というメッセージを送ると犬なら『わん』、猫なら『にゃあ』と鳴く」って奴でしょう。他にも、ちょっとWebをぐるぐるすると、清原選手をオブジェクトにしてみたり、箪笥をオブジェクトにしてみたりなどなど、およそプログラミングとはかけ離れた説明が蔓延しています。

これ、なかなか辛いところではあると思います。「おまえ、オブジェクト指向の入門書を書け」(などと依頼してくるような無謀は人はいないとは思いますが、仮にそういうことがあったとして…)と言われた場合、何も知らない読者に最初にどうやって概念を理解してもらおうか、と思ったときにこういうたとえ話を書きたくなってしいますね、やっぱり。「ああ、こんなこと書いても読者は『なんじゃこりゃ、さっぱりわかんねーぞ』と思っているんだろうなあ」と考えつつ。私など、この間出した本の中で「オブジェクト指向(これも簡単に説明するのが難しい用語ですね)」などと書いて説明を放棄してごまかしてしまいました…下読みしてくれた人に「ちゃんと注釈書きなさい」と言われたのですが、逃げてしまいました、ごめんなさい。
話を戻しまして、その下に、

こんな説明を読んで、なんだかわかったような気分になれる人は、どっちかというと思考力に欠ける人なんじゃないかと思います。「わけわからん」という反応のほうが技術屋としては正常でしょう。

とあります。技術屋じゃない人の方が、こういうなんだかわかったようなわからなかったような感じの説明でも、それで納得してくれたりしますね。実践で使うわけじゃないので「なんとなくわかった」で、そういう人たちはいいのかも知れません…ただ、それでとんでもない誤解をしていることもありますので注意が必要ですが。
技術屋として、こういうたとえ話を読んで「なるほど」と思う人はオブジェクト指向を理解している人なんでしょうし、これから入門しようという人にとっては、やっぱり「わけわからん」でしょうね。こういうたとえ話を聞いても「は?」とか「それで?」とか、そんな感じ。
さて、ページが戻りますが、「はじめに」に、

私は、オブジェクト指向の「本質」と呼ぶべきものは、カプセル化でも継承でもポリモルフィズムでもなく、「マルチプルインスタンス」にあると思っています。

「マルチプルインスタンス」とはいったいなんぞや、というのは前橋さんの文章を読んでいただくとして、「そう言われてみればそうだよなあ」と今更ながら気づいた私。いや、これが「本質」なのかどうかは論争があるところみたいですが、大きな特徴ではあとは思いますね、確かに。Cで同じ事を実現しようとしたら、普通はmallocか何かで領域(インスタンス用に)を複数確保して、関数(メソッド)を呼ぶときにその領域へのポインタを引数として渡すような形かなあ…もちろん出来なくはないけど面倒かも。
そして、このページの注釈に、

※4 というわけで、本稿を読んで気に入っていただけた方は、「Java謎+落とし穴徹底解明」もご購入いただけるとうれしいです(宣伝)。

はいはい、もう既に購入してありますです。買ったのは確か発売直後だったような…ただ単にちゃんと読んでないだけでして(おい)。

[前へ] [次へ]

[Home] [戻る]


mailto:lepton@amy.hi-ho.ne.jp