今日も、メイヤー先生ネタ。
03-10のエントリーで、メイヤー先生の著書(翻訳本)『オブジェクト指向入門』と『プログラミング言語理論への招待』を紹介しました。それで、本棚から引っ張り出して、また本をペラペラめくってみたのですが、いやーっ、メイヤー先生、サイコー。
いまや入手困難な本(最後の追記参照!)を話題にするのもどうかな、とも思いましたが、と学会の『トンデモ本の世界』シリーズなどは、実際にその本を読んでなくても/読む予定がなくても十分に楽しめるのですから、メイヤー本の内容紹介もいいだろうと判断しました。いやっ、もちろんメイヤー本はトンデモじゃないですよ。だけど、“読む楽しさ”の感覚はどこかトンデモと共通する部分があったりします。
今日は『オブジェクト指向入門』を取り上げます。これは、“盛りだくさん”、“示唆に富む”、“刺激的”な名著だと思いますよ(マジで!)。しかし、教科書/参考書として適切か(万人にとっての良書か)というと、それは疑わしい。安易に読み流せないという意味でハードだし、鵜呑みにするのは危険だし……
メイヤー先生は、ある問題の解決策に関して、いくつかの選択肢/代替案を説明してから、自分はかくかくの理由でこれを選ぶ、と常に明確に書いています。これはまた、「君ならどう判断する?」と問いかけられているようなもんで、ついつい考え込んでしまいます(そこがメイヤー本のすごいところ)。
例えば、Eiffelの仕様と、その設計判断(の一部)に関する先生の見解を要約すれば:
- インクリメント演算子(++)がない --
x := x + 1
と書けばいいのだから、いらない。 - オーバーロードがない -- 別な名前をつければいいじゃないか。
- returnがない -- returnは
大域脱出goto文みたいなものだからよくない。他にもreturnの弊害がある。Resultって予約変数への代入を使え。 - public、privateなどがない -- クラス定義先頭のexport句に、公開するメソッド等を列挙するほうがいい。
- nullがない -- そんな変なものはいらない。変数が未定義なときはnullとは別なvoidという状態がある。
- newがない -- 変数xに対して、
x.Create
とするとオブジェクト生成とバインドを同時に行う。それでいいのだ。 - スタティック(あるいはクラス)メソッドがない -- 必要なスタティックメソッドは限られている。それは言語に組み込まれているから他はいらない。
- インターフェースがない -- 抽象クラス(deferred classと呼ぶ)があれば十分。いらない。
- でも多重継承はある -- 多重継承なしではまともにプログラミングできないから当然。
(以上、FAQなどからの推測も含めた要約の文責は檜山)
現在のメジャーな言語の利用者には、無茶苦茶なことを言っているように思えるでしょうが、メイヤー先生はロジカルに丁寧に説得的にかつ情熱的に判断の根拠を説明しています。かなり強引なツジツマあわせもしていますが、うかつに読んでいればすっかり納得させられてしまうでしょう。
多重継承の必要性・重要性を説くためには、お得意の(いくぶん理不尽な)比喩が炸裂:
(10.4.2) もし多重継承が存在せずこの中(檜山注:複数の親クラス候補)のどれか1つを選ばなければならないとしたら、それは母親と父親の1人だけを選ぶことと等しい。
(13.2) 単一継承の環境では、EDITOR_CONSTANTSなどの定数定義のためのクラスは“本当の”親と親権を争うことになってしまうだろう。
メイヤー先生、なかなか辛辣<しんらつ>なところもあります。
(2.2.3) ご存知の読者もあるだろうが、極端な悪例として Fortranの“ガーベッジコモンブロック”がある。…(悪口をひとくさり)…
にもかかわらず、この古いことだけが取り柄の手法は Fortranプログラマのあいだで広く用いられ続けている。彼らの趣味はデバッグだから仕方のないことかもしれないが。
茶目っ気なのか、性格が悪いのか、なんだかよくわかりません。
メイヤー先生は自ら笑いを取りに来ているとは思えないのだけど、読みながらニヤニヤ、ゲラゲラ。それでいて猛烈にためになります。やっぱ、メイヤー先生、サイコー。
最後に念のために付言しますが、僕は本心でメイヤー先生の見識に感服しているし私淑<ししゅく>しています。でも、それは著書の一言一句をそまま受け入れることではありません。つっこみどころもないような凡庸な優等生みたいな本では、読んでもつまらんでしょう。メイヤー先生の本はその対極にあるわけで、やっぱり本物の名著だってことです。
[追記]川俣さんからのトラックバックのページ(http://mag.autumn.org/Content.modf?id=20060313160626)の下に、Amazonへのリンクがあります→http://www.amazon.co.jp/exec/obidos/ASIN/4756100503/ 。「24時間以内に発送」だそうです。容易に入手可能みたい、朗報(僕が勘違いしていただけかもしれません)。[/追記]