オブジェクト指向プログラミングにおいて、ほかのクラスやモジュールなどで定義されている機能を引き継ぐ仕組みのことです。
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で書く |
RSS | 管理者情報 | プライバシーポリシー |