Rubyにはモジュールという機能があり、クラスの機能を分割、再利用できます。モジュールの機能をクラスに追加するにはincludeを使います。
module Fuga def execute puts "fuga" end end class Hoge include Fuga end hoge1 = Hoge.new hoge1.execute hoge2 = Hoge.new hoge2.execute
これをミックスインといいます。モジュールはどのクラスにでも追加できます。
モジュールはクラスの前に宣言しなくてはなりません。Rubyのクラス宣言は実行文であるためです。コンパイル時のリンクも自動でやってくれるJavaのユーザは注意です。
インスタンス変数は以下のコードのようにモジュールとクラスどちら側からでもアクセスできます。しかし、特に意図がなければ、インスタンス変数をモジュール間で共有するのはお勧めできません。コードが非常に読みにくくなります。また、モジュールは他のモジュールやクラスから独立しているべきです。同一のインスタンス変数を使うということは、結合密度の高い機能であり、同一クラス、同一モジュールにまとめるべき機能です。
# これには注意して - インスタンス変数@aがモジュールとクラスに分かれている module Fuga def a return @a end end class Hoge include Fuga def a=(val) @a = val end end
追記:一律禁止するには根拠薄弱すぎるため削除