Was ist der Unterschied zwischen einem Mixin und einem Merkmal?

8

Soweit ich von Scala und Hack-

Mixins:

  • Kann Status haben (dh Instanzeigenschaften)
  • Kann nur konkrete Methoden liefern
  • Kann Konstruktoren haben, die in derselben Reihenfolge aufgerufen werden, in der ihre Klassen gemischt wurden
  • Wenn Aeingemischt Bund C, A instanceof B == falseundA instanceof C == false

Züge:

  • Kann nur Methoden bereitstellen, nicht angeben
  • Kann abstrakte Methoden deklarieren, die ein Verbraucher implementieren muss
  • Kann keine Konstruktoren haben
  • Wenn Aimplementiert Merkmale Bund C, A instanceof B == falseundA instanceof C == false

Ist das richtig oder fehlt mir etwas? Sind diese Definitionen für eine OO-Sprache oder nur für die oben genannten korrekt?

Bcherny
quelle
Über welche Verwendung der Begriffe sprechen Sie? Die Originalpapiere? Gilad Brachas Doktorarbeit?
Jörg W Mittag
Ich bin gespannt, welche Eigenschaften verschiedene Implementierungen von Merkmalen haben. Gleiches gilt für Mixins. Die Listen, die ich gegeben habe, sind das, was ich in zwei Sprachen gefunden habe, und ich möchte sehen, ob diese Listen auch für andere Sprachen gelten.
Bcherny
3
Die Frage scheint interessant und relevant zu sein, daher verstehe ich die Abstimmungen nicht wirklich. Der Wortlaut könnte jedoch verbessert werden, indem der falsche Eindruck von Subjektivität vermieden wird: Aus Ihrem Kommentar geht hervor, dass Sie nicht an unserer "Lieblingssprache" interessiert sind, sondern prüfen möchten, ob diese Eigenschaften für Mixins und Merkmale in allen unterstützenden Sprachen allgemein sind sie, oder wenn Ihre Ergebnisse nur die Scala-Ansicht dieser Konzepte darstellen.
Christophe
1
@Christophe: Die in der Frage angegebene Frage ist eine subjektive Einkaufslistenfrage und daher aus zwei Gründen nicht thematisch. Die in den Kommentaren angegebene Frage ist eine Einkaufslistenfrage und daher nicht zum Thema gehörend.
Jörg W Mittag
1
@Christophe: Fragen, die Listen von Dingen stellen, sind nicht zum Thema. In dieser Frage werden eine Liste der Sprachen mit Merkmalen und Mixins sowie eine Liste der Eigenschaften dieser Implementierungen abgefragt. Dafür ist Google da. Es erfordert 0 Software-Engineering-Erfahrung.
Jörg W Mittag

Antworten:

2

PHP hat kein Konzept für Mixins, aber es hat Eigenschaften, die wie eine Mischung aus Eigenschaften und Mixins von Hack / Scala aussehen:

  • Kann Eigenschaften definieren.
  • Kann Konstruktoren definieren.
  • Kann abstrakte Methoden definieren.
  • Unterstützt keine Vererbung.
  • Merkmale sind keine Typen.

Sind diese Definitionen für eine OO-Sprache oder nur für die oben genannten korrekt?

Ich glaube nicht, dass es überhaupt eine Sache gibt, die in allen OO-Sprachen gleich funktioniert. Sogar einige Grundlagen wie Vererbung und Schnittstellen weisen einige Variationen auf, ganz zu schweigen von verschwommeneren Konstrukten wie Merkmalen / Mixins.

rob006
quelle
0

Merkmale sind statischer Zugriff in PHP, wie von Benjamin Eberlei in seinem Blog erklärt . Sie ähneln dem automatischen Kopieren und Einfügen von Code.

Dies bedeutet nicht, dass Eigenschaften absolut böse sind, aber sie werfen meistens Kopplungsprobleme auf.

Mixin ist im Allgemeinen die übliche (etwas sichere) Verwendung der Mehrfachvererbung. Sprachen mit Mehrfachvererbung und By-Ref-Typisierung (Ente) wie Python bieten eine elegante Verwendung für Mixins.

Abstrus
quelle