MixinとTraitの違いは何ですか?


8

ScalaとHackからわかることから

ミックスイン:

  • 状態を持つことができます(つまり、インスタンスプロパティ)
  • 具体的な方法しか提供できない
  • クラスが混合されたのと同じ順序で呼び出されるコンストラクターを持つことができます
  • もしA混合物中BCA instanceof B == falseそしてA instanceof C == false

特徴:

  • メソッドのみを提供でき、状態は提供できません
  • コンシューマが実装する必要がある抽象メソッドを宣言できます
  • コンストラクタを持つことはできません
  • AトレイトBとを実装する場合CA instanceof B == falseおよびA instanceof C == false

これは正しいですか、または何か不足していますか?これらの定義は、任意のOO言語に対して正確ですか、それとも上記の言語に対してのみ正確ですか?


どのような用語の使用について話しているのですか?オリジナルの論文は?ギラドブラハス博士論文
イェルクWミッターク

トレイトのさまざまな実装にどのような特性があるか知りたいです。同じことがミックスインにも当てはまります。私が提供したリストは2つの言語で見つけたものであり、それらのリストが他の言語にも当てはまるかどうかを確認したいと思います。
bcherny 2018

3
質問は興味深く関連性があるようで、私は反対票を本当に理解していません。ただし、主観の誤った印象を避けることで表現を改善できる可能性があります。コメントから、「お気に入りの言語」に興味はないが、これらのプロパティがサポートするすべての言語のミックスインと特性に一般的であるかどうかを確認したいことがわかりますまたは、あなたの発見がこれらの概念のScalaの見解を表すだけの場合。
クリストフ

1
@Christophe:質問で述べられている質問は、主観的な買い物リストの質問であり、2つの理由からトピック外です。コメントで述べられている質問は買い物リストの質問であり、トピックから外れています。
イェルクWミッターク

1
@Christophe:モノのリストを尋ねる質問はトピックから外れています。この質問では、特性とミックスインを持つ言語のリストと、それらの実装が持つプロパティのリストを求めます。それがGoogleの目的です。ソフトウェアエンジニアリングの専門知識は必要ありません。
イェルクWミッターク

回答:


2

PHPにはミックスインの概念はありませんが、hack / scalaの特性とミックスインのミックスのように見える特性があります。

  • プロパティを定義できます。
  • コンストラクタを定義できます。
  • 抽象メソッドを定義できます。
  • 継承はサポートしていません。
  • 特性はタイプではありません。

これらの定義は、任意のOO言語に対して正確ですか、それとも上記の言語に対してのみ正確ですか?

すべてのオブジェクト指向言語で同じように機能するものが1つでもあるとは思いません。継承やインターフェースのようないくつかの基本的なものにもいくつかのバリエーションがあり、特性/ミックスインのようなよりぼやけた構成には言及していません。


0

特性は、Benjamin Eberleiのブログで説明されているように、PHPの静的アクセスです。これらは、コードの自動コピー貼り付けに似ています。

これは、特性が絶対に悪であることを意味するものではありませんが、ほとんどの場合、特性に結合の問題を課します。

一般的にミックスインは、多重継承の通常の(やや安全な)使用方法です。Pythonのように多重継承と参照(ダック)タイピングを使用する言語は、ミックスインをエレガントに使用できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.