とりあえず多重継承をやめるよ

プログラミング言語 Ruby」が一段落した*1ので、次の積読まつもとゆきひろ コードの世界」を読み始めた。今、2章中盤くらい。

まつもとゆきひろ コードの世界?スーパー・プログラマになる14の思考法

まつもとゆきひろ コードの世界?スーパー・プログラマになる14の思考法

ずっと、「多重継承するとスパゲッティになるなぁ」と思ってたんだけど、いろいろ納得した。そおいうことかー!

Stream を継承した、ReadStream, WriteStrem があって、さらに ReadWriteStream を作るという話のとこで、「単一継承だとそうなるよね、どうするんだ?」とか思ったけど、そこで Mix-in ですか! Readable と Writable 作って、Mix-in ですよ。
Ruby は単一継承しかできなくて、こういう時どうするんだ、とか思ってたのも氷解した。やっぱり Module 作って include するのかなぁとか、ぼんやり思ってたのもだいぶしっくり来た。←というか、「プログラミング言語 Ruby ほんとにちゃんと読んだのかレベル」ですかねw

あと、Java などの静的言語における「仕様の継承」と「実装の継承」の話もあって、Javaインターフェイスは何となくわかった。Moose の Role は Javaインターフェイスじゃないとかって話題も少しわかった気がする。

PerlMoose があるから、多重継承はなるべく避けて Mix-in しよう。今まで Angelos 見て何となくまねてたけど、だいぶわかったんじゃないか?

あああああ、モダン Perl 入門にも Moose の Role はそういうもんだって書いてあったね。わかってるねん、わかってるねんで!

この本おもろいなぁ。理解が進むって楽しいなぁ。スーパープログラマにはなれなくても、ヘボプログラマのヘボは取れそう。周りに迷惑をかけることも減りそう >_<

追記

そして次のページ読んだら、「多重継承は良くないものだ」というのは誤解と書いてあった。「うまく使わないと問題が起きることがある」だそうだ。

そして、「Mix-in は多重継承と別物ではなくて、多重継承の使い方のテクニックの一つ」とあった。なるほど−。

*1:Ruby プラットフォームの所に差し掛かったけど、もう使いながら見た方がよさそう。