mixin | Programming Place Plus 用語集

トップページ用語集

名称

解説

オブジェクト指向プログラミングにおいて、ほかのクラスやモジュールなどで定義されている機能を引き継ぐ仕組みのことです。

mixin が具体的にどのような方法で実現されるかは、プログラミング言語の種類によってさまざまです。

あるクラスの機能を引き継ぐ代表的な方法として継承があり、mixin を継承によって行う場合もあり得ます。ただ、継承には、スーパークラスオブジェクトが使われている箇所を、サブクラスのオブジェクトを使うように置き換えたとしても、意味合いが変化しないことが望ましいとする原則(リスコフの置換原則)があり、引き継ぎたいものによっては、継承が不適切な場合もあります(スーパークラスの役割ごと引き継ぎたくはないことがある)。また、複数のクラスから機能を引き継ぎたい場合、取り扱いが難しい多重継承を使うことになります(そもそも多重継承を禁止しているプログラミング言語も多い)。

mixin を実現する方法の1つとして、それ単体で使用することを想定しないクラスやモジュールを定義し、その機能をほかのクラスに引き継ぐという方法があります。Ruby では、mixin のためのモジュール(インスタンス化できないクラスのようなもの)を作り、その機能を引き継ぎたいクラスの定義内で include することで実現できます。この include は、モジュール定義内にあるものをそっくりそのまま取り込んでくるイメージです。

module M
    def hallo
        puts "Hello."
    end
end

class C
    // モジュールM の機能を取り込むが、継承関係が結ばれるわけではない
    include M

    // ほかのメンバ
end

この方法だと、複数のモジュールから機能を取り込めますし、あるモジュールをほかのいくつかのクラスが取り込んでも問題ありません。


また、クラスやオブジェクトに対して新たなメソッドを後付けする拡張メソッドという仕組みを使えるプログラミング言語もあり(Ruby、C# など)、mixin のひとつの形とみなされることがあります。


参考リンク

更新履歴


用語集のトップページへ

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
X で ポストフォロー LINE で送る noteで書く
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー
先頭へ戻る