「オブジェクト指向設計実践ガイド」 第7章 モジュールでロールの振る舞いを共有する

第7章 モジュールでロールの振る舞いを共有する

継承はクラスの継承のみにとどまらない。Rubyのモジュールを使い振る舞いを共有させることが可能である。

ロール

クラスによる振る舞いの共有が縦の関係であるとすればロールによる振る舞いの共有は横の関係。

オブジェクト指向なアプリケーションにおける一般的な規則「オブジェクトは自身を管理すべき」。オブジェクトAについての情報を得たいとき、オブジェクトBに関する知識が要求されるのであればそこには不穏な匂いを感じ取るべきである。オブジェクトAの情報を得るには、オブジェクトAに関する情報のみあれば十分なはずである。

Rubyのメソッド探索については

Effective Ruby

Effective Ruby

メタプログラミングRuby 第2版

メタプログラミングRuby 第2版

などが詳しいので省略

モジュールの使い方

抽象スーパークラスの中に、あるサブクラスは使うが他のサブクラスは使わないコードがあってはいけない。スーパークラスはすべてのサブクラスの汎化でなければならないが、そのようなコードはサブクラスで汎用的に使われるものではなく特化されたものである可能性が高い。