Qual è la differenza tra un Mixin e un Tratto?

2

Da quello che posso dire da Scala e Hack -

mixin:

  • Può avere lo stato (cioè proprietà dell'istanza)
  • Può fornire solo metodi concreti
  • Può avere costruttori, chiamati nello stesso ordine in cui le loro classi sono state mescolate in
  • Se A si mescola in B e C , A instanceof B == false e A instanceof C == false

Tratti:

  • Può fornire solo metodi, non lo stato
  • Può dichiarare metodi astratti, che un consumatore deve implementare
  • Non può avere costruttori
  • Se A implementa i tratti B e C , A instanceof B == false e A instanceof C == false

È corretto o mi sto perdendo qualcosa? Queste definizioni sono accurate per qualsiasi lingua OO o solo per quelle sopra menzionate?

    
posta bcherny 14.04.2018 - 22:37
fonte

2 risposte

3

PHP non ha il concetto di mixins, tuttavia ha tratti che sembrano mix di tratti e mix da hack / scala:

  • Può definire le proprietà.
  • Può definire i costruttori.
  • Può definire metodi astratti.
  • Non supporta l'ereditarietà.
  • I tratti non sono tipi.

Are these definitions accurate for any OO language or just for the above mentioned ones ?

Non penso che ci sia anche una sola cosa che funzionerà allo stesso modo in tutte le lingue OO. Anche alcune basi come l'ereditarietà e le interfacce hanno alcune varianti, non menzionano costrutti più sfocati come i tratti / mixin.

    
risposta data 17.04.2018 - 23:58
fonte
0

I tratti sono l'accesso statico in PHP come spiegato da Benjamin Eberlei sul suo blog . Sono simili alla copia e incolla automatica del codice.

Questo non significa che i tratti siano assolutamente malvagi, ma la maggior parte delle volte impongono problemi di accoppiamento.

La miscelazione in generale è il solito (un po 'sicuro) uso dell'ereditarietà multipla. Le lingue con ereditarietà multipla e la digitazione in base al dump (duck) come Python offrono eleganti utilizzi per i mixin.

    
risposta data 20.04.2018 - 05:11
fonte

Leggi altre domande sui tag