このブログの更新は Twitterアカウント @m_hiyama で通知されます。
Follow @m_hiyama

メールでのご連絡は hiyama{at}chimaira{dot}org まで。

はじめてのメールはスパムと判定されることがあります。最初は、信頼されているドメインから差し障りのない文面を送っていただけると、スパムと判定されにくいと思います。

参照用 記事

メイヤー先生は比喩が大好き

昨日のエントリーで:

メイヤー先生の著書にはお世話になりました。随分と影響も受けました。

と書きました。メイヤー先生の著書を具体的にいえば、『オブジェクト指向入門』(翻訳書 アスキー出版局 1990)と『プログラミング言語理論への招待』(同 1995)です。『入門』、『招待』という題名の割には大部で本格的な教科書です。残念ながら、現在はどちらも入手困難なようです([追記]でもないようです、03-13のエントリーの追記を参照[/追記])。

僕はこれらでお勉強したってわけではないのだけど、その視点や語り口の面白さで、すっかりメイヤー・ファンになりました。メイヤーさんて、単なる学者じゃなくて、フランスの電力会社に勤めた後で、アメリカの大学の先生になって、ソフトウェア会社の経営者でもある、って人です。

『入門』は、メイヤーの実務家/プログラミング言語設計者としての側面が、『招待』は、教育者/コンピューティング・サイエンチストとしての側面が出ているように感じます。とにかく、ものすごい広い範囲の知識と経験を持っているのだけど、Eiffelの設計判断に現れているように、独特の価値観とバランス感覚を持っています。

その「独特の価値観とバランス感覚」を前面(かつ全面)に出すスタイルが痛快なのだけど、それに同意できるかというと、そうとは言えません。「よくわからん」「なんでやねん!」という部分はけっこうあります(それもまた面白い)。

特に「メイヤー先生、それやめてよ」と思うのは(昨日のエントリーでも触れた)ショーモナイ比喩です。例によって、「動物(Animal)、哺乳類(Mammal)、犬(Dog)」の例はいたるところで使ってます。“変数の型と、値/オブジェクトの実際の型”の説明で、この比喩をどう使っているか引用しましょう。下のような代入を思い出して読んでください


Animal a1 = new Ladybug() // てんとう虫
Animal a2 = new Whale(); // 鯨
Animal a3 = new Dog(); // 中身は犬だが、箱のラベルは動物

Mammal m1 = new Ladybug(); // NG
Mammal m2 = new Whale();
Mammal m3 = new Dog(); // 中身は犬だが、箱のラベルは哺乳類

Dog d1 = new Ladybug(); // NG
Dog d2 = new Whale(); // NG
Dog d3 = new Dog();

メイヤー先生曰く:

(10.1.6) ペットカタログ販売の申込書に、ぼうっとしていてただ“動物”と書いてしまったとしよう。この場合、犬が送られようが、てんとう虫が送られようが、鯨が送られようが、文句はいえない。一方、確かに犬を頼んだのに、ある朝郵便配達人がANIMALまたはMAMMALというラベルを貼った箱を持ってきたら、私にはこれを業者に返す権利がある。たとえ、箱の中から紛れもない吠え声が聞こえても、である。

ウーム、先生、これマジですか?ジョークですか? ジョークのつもりで書いているのにイチイチ指摘するのも野暮だからそれはやめるけど。それにしても、このオハナシは無理があり過ぎ! -- 情景を想像すると異様に印象的だから、教育的効果はあるかもしれないが。