¿Cuál es la diferencia entre un Mixin y un rasgo?

8

Por lo que puedo decir de Scala y Hack-

Mixins:

  • Puede tener estado (es decir, propiedades de instancia)
  • Solo puede proporcionar métodos concretos
  • Puede tener constructores, que se llaman en el mismo orden en que se mezclaron sus clases
  • Si se Amezcla en By C, A instanceof B == falseyA instanceof C == false

Rasgos:

  • Solo puede proporcionar métodos, no indicar
  • Puede declarar métodos abstractos, que un consumidor debe implementar
  • No puede tener constructores.
  • Si Aimplementa rasgos By C, A instanceof B == falseyA instanceof C == false

¿Es correcto o me falta algo? ¿Estas definiciones son precisas para cualquier lenguaje OO o solo para los mencionados anteriormente?

bcherny
fuente
¿De qué uso de los términos estás hablando? Los documentos originales? Tesis doctoral de Gilad Brachas?
Jörg W Mittag
Tengo curiosidad por saber qué propiedades tienen varias implementaciones de rasgos. Lo mismo vale para los mixins. Las listas que di son las que encontré en 2 idiomas, y quiero ver si esas listas también son válidas para otros idiomas.
bcherny
3
La pregunta parece interesante y relevante, por lo que realmente no entiendo los votos negativos. Sin embargo, la redacción podría mejorarse evitando la falsa impresión de subjetividad: de su comentario resulta que no está interesado en nuestro "idioma favorito" pero quiere ver si estas propiedades son generales para los mixins y rasgos en todos los idiomas que admiten ellos, o si sus hallazgos solo representan la vista Scala de estos conceptos.
Christophe
1
@Christophe: La pregunta como se indica en la pregunta es una pregunta subjetiva de la lista de compras, y por lo tanto fuera de tema por dos razones. La pregunta como se indica en los comentarios es una pregunta de la lista de compras, y por lo tanto fuera de tema.
Jörg W Mittag el
1
@Christophe: Las preguntas que hacen listas de cosas están fuera de tema. Esta pregunta solicita una lista de idiomas que tienen rasgos y mixins y una lista de propiedades que tienen esas implementaciones. Para eso es Google. Requiere 0 experiencia en ingeniería de software.
Jörg W Mittag

Respuestas:

2

PHP no tiene el concepto de mixins, sin embargo, tiene rasgos que parecen mezcla de rasgos y mixins de hack / scala:

  • Puede definir propiedades.
  • Puede definir constructores.
  • Puede definir métodos abstractos.
  • No es compatible con la herencia.
  • Los rasgos no son tipos.

¿Estas definiciones son precisas para cualquier lenguaje OO o solo para los mencionados anteriormente?

No creo que haya una sola cosa que funcione de la misma manera en todos los idiomas OO. Incluso algunos conceptos básicos como la herencia y las interfaces tienen algunas variaciones, sin mencionar construcciones más borrosas como rasgos / mixins.

rob006
fuente
0

Los rasgos son el acceso estático en PHP como lo explicó Benjamin Eberlei en su blog . Son similares a copiar y pegar código automáticamente.

Esto no significa que los rasgos sean absolutamente malos, pero la mayoría de las veces imponen problemas de acoplamiento.

Mixin en general es el uso habitual (algo seguro) de herencia múltiple. Los idiomas con herencia múltiple y mecanografía by-ref (duck) como Python ofrecen usos elegantes para mixins.

abstrus
fuente