Apa perbedaan antara Mixin dan Trait?

8

Dari apa yang saya tahu dari Scala dan Hack-

Mixin:

  • Dapat memiliki status (mis. Properti instance)
  • Hanya bisa memberikan metode konkret
  • Dapat memiliki konstruktor, yang dipanggil dalam urutan yang sama dengan kelas mereka dicampur
  • Jika Adicampur Bdan C, A instanceof B == falsedanA instanceof C == false

Sifat:

  • Hanya dapat memberikan metode, bukan negara
  • Dapat mendeklarasikan metode abstrak, yang harus diterapkan oleh konsumen
  • Tidak dapat memiliki konstruktor
  • Jika Amenerapkan sifat Bdan C, A instanceof B == falsedanA instanceof C == false

Apakah ini benar atau saya kehilangan sesuatu? Apakah definisi ini akurat untuk bahasa OO atau hanya untuk yang disebutkan di atas?

bcherny
sumber
Apa penggunaan istilah yang Anda bicarakan? Koran-koran asli? Tesis PhD Gilad Brachas?
Jörg W Mittag
Saya ingin tahu properti apa yang dimiliki oleh berbagai implementasi sifat. Hal yang sama berlaku untuk mixin. Daftar yang saya berikan adalah apa yang saya temukan di 2 bahasa, dan saya ingin melihat apakah daftar itu juga berlaku untuk bahasa lain.
bcherny
3
Pertanyaannya sepertinya menarik dan relevan, jadi saya tidak begitu mengerti downvotes. Namun, kata-katanya dapat ditingkatkan dengan menghindari kesan salah subjektivitas: dari komentar Anda ternyata Anda tidak tertarik dengan "bahasa favorit" kami tetapi ingin melihat apakah properti ini bersifat umum untuk mixin & ciri-ciri semua bahasa yang mendukung mereka, atau jika temuan Anda hanya mewakili pandangan Scala dari konsep-konsep ini.
Christophe
1
@Christophe: Pertanyaan yang dinyatakan dalam pertanyaan adalah pertanyaan daftar belanja subjektif, dan dengan demikian di luar topik karena dua alasan. Pertanyaan sebagaimana dinyatakan dalam komentar adalah pertanyaan daftar belanja, dan dengan demikian di luar topik.
Jörg W Mittag
1
@Christophe: Pertanyaan yang menanyakan daftar hal di luar topik. Pertanyaan ini menanyakan daftar bahasa yang memiliki sifat dan mixin dan daftar properti yang dimiliki oleh implementasi tersebut. Untuk itulah Google diperuntukkan. Dibutuhkan 0 keahlian rekayasa perangkat lunak.
Jörg W Mittag

Jawaban:

2

PHP tidak memiliki konsep mixin, namun memiliki sifat-sifat yang terlihat seperti campuran sifat dan mixin dari hack / scala:

  • Dapat mendefinisikan properti.
  • Dapat mendefinisikan konstruktor.
  • Dapat mendefinisikan metode abstrak.
  • Tidak mendukung warisan.
  • Ciri bukan tipe.

Apakah definisi ini akurat untuk bahasa OO atau hanya untuk yang disebutkan di atas?

Saya tidak berpikir bahwa ada satu hal pun yang akan bekerja dengan cara yang sama di semua bahasa OO. Bahkan beberapa dasar seperti pewarisan dan antarmuka memiliki beberapa variasi, belum lagi konstruk yang lebih kabur seperti sifat / mixin.

rob006
sumber
0

Ciri-ciri adalah akses statis di PHP seperti yang dijelaskan oleh Benjamin Eberlei di blog-nya . Mereka mirip dengan copy-paste kode otomatis.

Ini tidak berarti bahwa sifat-sifat itu benar-benar jahat, tetapi mereka sebagian besar sering menimbulkan masalah penggandaan.

Mixin secara umum adalah penggunaan multiple inheritance yang biasa (agak aman). Bahasa dengan banyak pewarisan dan pengetikan by-ref (bebek) seperti Python menawarkan penggunaan elegan untuk mixin.

abstrus
sumber