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. Was ist der Unterschied zwischen einem Mixin und dem Dekorationsmuster?
- 2. Was ist der Unterschied zwischen Objekt einer abstrakten Klasse und Liste von Objekten der abstrakten Klasse?
- 3. Was ist der Unterschied zwischen der nicht statischen Methode und der statischen Methode einer abstrakten Klasse?
- 4. Was ist der Unterschied zwischen einer abstrakten und einer statischen Klasse?
- 5. Unterschied zwischen abstrakten Klasse und Trait
- 6. Was ist der Unterschied zwischen einem Squeak/Pharo-Merkmal und einem Neusprech-Mixin?
- 7. Was ist der Unterschied zwischen aufgeblähter Klasse und markierter Klasse?
- 8. Was ist der Unterschied zwischen einem Bündel und einer Absicht?
- 9. Was ist der Unterschied zwischen einem URI und einer URL?
- 10. Was ist der Unterschied zwischen einem Algorithmus und einer Funktion?
- 11. Was ist der Unterschied zwischen einem Fehler und einer Ausnahme?
- 12. Was ist der Unterschied zwischen einem Benutzer und einer Rolle?
- 13. Was ist der Unterschied zwischen einer Schließung und einem Modul?
- 14. Was ist der Unterschied zwischen einem Ausdruck und einer Aussage?
- 15. Was ist der Unterschied zwischen einer Sprache und einem Framework?
- 16. Was ist der Unterschied zwischen einem Adapter und einer Netzwerkschnittstelle?
- 17. Was ist der Unterschied zwischen einer Ansicht und einem Stream?
- 18. Was ist der Unterschied zwischen einem Animator und einer Animation?
- 19. Unterschied zwischen einer Klasse und einem Modul
- 20. Was ist der Unterschied zwischen einem Key und einem KeySpec?
- 21. In C# Was ist der Unterschied zwischen einem Destruktor und einer Finalize-Methode in einer Klasse?
- 22. Was ist der Unterschied zwischen einem Workflow und einem Flowchart?
- 23. Was ist der Unterschied zwischen Mixins und Vererbung?
- 24. Was ist der Unterschied zwischen `==` und `ist`?
- 25. Was ist der Unterschied zwischen einem QWindow und QWidget
- 26. Was ist der Unterschied zwischen einem Index und einem Fremdschlüssel?
- 27. Was ist der Unterschied zwischen einem RoutedCommand und einem RoutedUICommand?
- 28. Was ist der Unterschied zwischen einem Muster und einem Pfad?
- 29. Was ist der Unterschied zwischen einem Primärschlüssel und einem Ersatzschlüssel?
- 30. Was ist der Unterschied zwischen einem Integrator und einem Tiefpassfilter?
+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