Mix-inについて追記。

by tanabe on August 08, 2005

Ruby Mix-inの詳細については、まつもとゆきひろさんの日経Linux 2005年7月号の連載「まつもと直伝プログラミングのオキテ 第3回 多重継承の光と影」に詳しいので、気になった方には強くおすすめ。

日経BPの記事検索サービスでこの記事だけのダウンロード購読もできます。(値段高いけど、このシリーズに関しては払う価値あります。)

Mix-inの解説の一部だけを抜粋。

 Mix-inというのは元々Lisp界で始まった多重継承の使い方です。Mix-in手法には次の2つの条件があります。

  • 通常の継承は単一継承に限る
  • 2つめ以降の継承は,Mix-inと呼ばれる抽象クラスからに限定する

 Mix-inクラスは以下のような特徴を備えた抽象クラスです。

  • 単独でインスタンスを作らない
  • 通常のクラスから継承しない

 これらの規則に従うことで,クラス階層は単一継承と同じ木構成になりますし,機能の共有を実現するには,共有する機能だけを持つMix-inをクラス階層木に「差し込む」ことで達成できます。

この回は他にも実装の継承(Javaのextends)と仕様の継承(Javaのimplements)についての話など、とてもわかりやすくまとまっていて良い内容でした。(Rubyファンでない方は、「けっきょくRubyを誉めるのかよ!」て思うかもしれませんが、そこはご愛嬌)

Mix-in話は過去の「Matzにっき」にもためになる話がありました。

http://www.rubyist.net/~matz/20040127.html#p02
http://www.rubyist.net/~matz/20040128.html#p01
http://www.rubyist.net/~matz/20040128.html#p03

それぞれコメントも面白いので、お好きな方はぜひどうぞ。