これは自由回答形式の質問ですが、特性に関する SO コミュニティから意見を求めたいと思います。Squeak/Pharo の Traits は良いことだと思いますか?それとも、それらを避けて代わりに構成と委譲を使用する必要がありますか? 私はそれらを使用する方法を知っていますが (Pharo book のおかげで)、それらを使用することがどの程度受け入れられるか、または使用しても問題ない場所とそうでない場所についてはよくわかりません。
2 に答える
トレイトはコードに強い依存関係をもたらすため、私は好きではありません。これらの依存関係は明白 (トレイトをインポートするクラス、メソッドを期待するトレイト) である場合もありますが、非常に微妙な場合もあります (スーパー メソッド/インスタンス変数をシャドウするトレイト)。さらに、特性に対する適切なツール サポートはありません。
私の経験では、委任は、Smalltalk のような動的に型付けされたオブジェクト指向言語で、はるかに優れた再利用可能な設計を提供します。
物事には長所と短所があります。Lukas は、多くの短所について正しく言及しています。
- コードに強い依存関係を導入します。
- 適切なツール サポートがありません。
2 番目はいつの日かなくなるかもしれませんが、1 番目はそうではありません。
特性の目的は、Object 以外のスーパークラスを共有しない 2 つのクラスがインスタンス メソッドを共有する場合に発生するコードの重複を防ぐことです。現在、委任によって修正できる場合もありますが、多くの場合、修正できません。したがって、特性の長所は次のとおりです。
- コードの重複を減らしました。
ここでの私の評決は、欠点が勝っているということです。今日も永遠に、コードの重複は必ず発生すると思います。また、委任がうまくいかない場合でも、コピーされたコード スニペットの分岐進化に先行することが多いため、コードの重複はそれほど有害ではないと想像することさえできます。