Qual é a diferença entre um Mixin e um Trait?


8

Pelo que posso dizer de Scala e Hack-

Mixins:

  • Pode ter estado (por exemplo, propriedades da instância)
  • Só pode fornecer métodos concretos
  • Pode ter construtores, chamados na mesma ordem em que suas classes foram misturadas
  • Se Amisturar Be C, A instanceof B == falseeA instanceof C == false

Traços:

  • Só pode fornecer métodos, não declarar
  • Pode declarar métodos abstratos, que um consumidor deve implementar
  • Não pode ter construtores
  • Se Aimplementa características Be C, A instanceof B == falseeA instanceof C == false

Isso está correto ou estou faltando alguma coisa? Essas definições são precisas para qualquer idioma OO ou apenas para os mencionados acima?


De que uso dos termos você está falando? Os documentos originais? Gilad Brachas Tese de doutorado?
Jörg W Mittag

Estou curioso para saber quais propriedades várias implementações de características têm. O mesmo vale para mixins. As listas que dei são as que encontrei em dois idiomas e quero ver se essas listas também são válidas para outros idiomas.
bcherny

3
A pergunta parece interessante e relevante, então eu realmente não entendo os votos negativos. No entanto, a redação pode ser melhorada evitando a falsa impressão de subjetividade: pelo seu comentário, você não está interessado em nosso "idioma favorito", mas deseja ver se essas propriedades são gerais para misturas e características em todos os idiomas suportados ou se suas descobertas representam apenas a visão Scala desses conceitos.
Christophe

1
@Christophe: A pergunta, como declarada na pergunta, é uma questão subjetiva da lista de compras e, portanto, fora de tópico por dois motivos. A pergunta conforme declarada nos comentários é uma pergunta da lista de compras e, portanto, fora de tópico.
Jörg W Mittag

1
@Christophe: Perguntas que fazem listas de coisas são fora de tópico. Esta pergunta solicita uma lista de idiomas que possuem características e mixins e uma lista de propriedades que essas implementações possuem. É para isso que serve o Google. Requer 0 conhecimento em engenharia de software.
Jörg W Mittag

Respostas:


2

O PHP não possui o conceito de mixins, no entanto, possui características que se parecem com mix de características e mixins do hack / scala:

  • Pode definir propriedades.
  • Pode definir construtores.
  • Pode definir métodos abstratos.
  • Não suporta herança.
  • Traços não são tipos.

Essas definições são precisas para qualquer idioma OO ou apenas para os mencionados acima?

Não acho que exista uma única coisa que funcione da mesma maneira em todos os idiomas OO. Mesmo alguns princípios básicos, como herança e interfaces, têm algumas variações, sem mencionar construções mais desfocadas, como características / mixins.


0

Traços são acesso estático no PHP, conforme explicado por Benjamin Eberlei em seu blog . Eles são semelhantes à cópia e colagem automatizada de código.

Isso não significa que as características sejam absolutamente más, mas na maioria das vezes impõem problemas de acoplamento.

Mixin em geral é o uso usual (um tanto seguro) de herança múltipla. Idiomas com herança múltipla e digitação by-ref (duck) como Python oferecem usos elegantes para mixins.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.