web-dev-qa-db-ja.com

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

Scala and Hack-

ミックスイン:

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

特徴:

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

これは正しいですか、または何か不足していますか?これらの定義は、OO言語の場合も、上記の言語の場合も同じですか?

8
bcherny

PHPにはミックスインの概念はありませんが、 traits があり、これはhack/scalaのトレイトとミックスインのミックスのように見えます。

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

これらの定義は、OO言語の場合も、上記の言語の場合も同じですか?

すべてのOO言語で同じように機能することは1つもないと思います。継承やインターフェースなどの基本的なものにもいくつかのバリエーションがあります。トレイト/ミックスイン。

2
rob006

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

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

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

0
abstrus