Ich habe gerade ein article auf einem Framework in Java gefunden, das es scheinbar ermöglicht, Mixins und etwas namens Composite Oriented Programming (die für alle, die ich weiß, könnte sogar das gleiche sein ...) Ich habe auch schon gehört von/mit gearbeitet AOP, und ich bin nicht sicher, wie es sich davon unterscheidet ...Was ist der Unterschied zwischen einer abstrakten Klasse und einem Mixin?
Antwort
Auf einer Sprache-agnostic Ebene, fügt ein Mixin einfach Funktionalität zu einer Klasse hinzu, und ist mehr für Programmierer Bequemlichkeit und Vermeidung von Code-Duplizierung. Eine abstrakte (Basis-) Klasse bildet eine Is-a-Beziehung und ermöglicht Polymorphie. Ein Grund, warum Vererbung überstrapaziert wird, besteht darin, dass es eine einfache Möglichkeit ist, Mixins zu implementieren, ohne ein Vorwort in Sprachen zu schreiben, die sie nicht wirklich unterstützen. Das Problem ist, dass Sie eine polymorphe ist-a-Beziehung als Nebeneffekt deklarieren, was Ihre API verwirrender macht und möglicherweise Mehrdeutigkeit hinzufügt. Daher unterstützen neuere Sprachen wie D und Ruby Mixins als native Funktionen, was eine praktische Möglichkeit bietet, einer Klasse eine Reihe von Funktionen hinzuzufügen, ohne eine polymorphe is-a-Beziehung zu deklarieren.
Mixin ist nie als eigenständige Klasse gedacht. Sie fügen der deklarierten Klasse nur einige Funktionen hinzu. In Python können sie einfach von Klassen-Dekoratoren angewendet werden. Zum Beispiel könnten Sie Ihre Klasse mit Singleton Mixin dekorieren, was Ihre Klasse zu einem Singleton macht.
+1 Gute kurze Erklärung. Dieses COP-Zeug klingt cool. Obwohl ich gerne sehe, dass sich diese Art von Dingen bis auf das Kernniveau der Sprache erstreckt. Gleiches mit AOP-Zeug. – BuddyJoe
@Bruno Eine Kernsprache wie C++? – leeand00
kurz und sehr klar. Tolle Erklärung! – Hugo