Mixin
トレイトの継承はインクルード(include)と言う方が好まれる。言語によってモジュール(module)プロトコル(protocol)ロール(roles)といった形態もあり、それぞれ微妙な機能の違いがある。Mix-inクラスと抽象クラスと具象クラスを一律化している言語もある。関数オブジェクトをトレイトとして扱える言語もある。型クラス(type class)をトレイト相当にしている言語もある。メソッド実装可能にしたインターフェースを事実上のトレイトにしてる言語もある。
Mix-inの利点は以下のようになる。
クラスの多重継承問題を回避しつつ、多様な機能性のみを利用できる。
Mix-inクラスによる機能の分類体系化によって、コードの再利用性を促進させる。
親クラスの特化の義務を負わずに、親クラスの機能をかいつまんで利用できる権利を得る。
Mix-inの欠点は以下のようになる。
Mix-inの多用は機能中心のプログラムを招いて、データ中心のオブジェクト指向の本質から外れる。
Mix-in設計は煩雑になりがちであり、UMLクラス図の汎化特化設計および実現実装設計よりも品質が低下する。
Mix-inではメソッド決定順序(MRO)がブラックボックス化しがちであり、結局これは多重継承問題と同類になる。