Nach allem, was ich über "aspektorientierte Programmierung" oder "aspektorientierte Softwareentwicklung" gelernt habe, scheint es ungenau zu sein, es als Programmierparadigma oder -methode zu bezeichnen. Soweit ich das beurteilen kann, handelt es sich nicht um eine grundlegende Programmiertechnik.
Um herauszufinden, was unter "Paradigma" und "Methodik" zu verstehen ist, beziehen Sie sich bitte auf die folgenden Definitionen aus dem American Heritage Dictionary. Vergleichen Sie, wie gut oder schlecht "objektorientierte Programmierung" für jede Anwendung gilt und wie gut AOP passt.
Paradigma: Eine Reihe von Annahmen, Konzepten, Werten und Praktiken, die eine Sichtweise auf die Realität für die Gemeinschaft darstellen, die sie teilt, insbesondere in einer intellektuellen Disziplin.
Methodik: Eine Reihe von Praktiken, Verfahren und Regeln, die von Personen angewendet werden, die in einer Disziplin arbeiten oder sich an einer Untersuchung beteiligen. eine Reihe von Arbeitsmethoden.
"Evidenzbasierte Medizin" erfüllt die Definition des Paradigmas, aber "Hysterektomie-basierte Medizin" wäre eine Fehlbezeichnung, da der Problemraum zu eng ist.
Ich habe den Eindruck, dass AOP möglicherweise falsch benannt ist, weil AOP auf der Grundlage des Suffixes "Orientierte Programmierung" behauptet, sowohl ein Paradigma als auch eine Methodik zu sein, wie es "Objektorientierte Programmierung" ist.
Beide Begriffe (Paradigma und Methodik) weisen auf eine grundlegende Technik hin, bei der ich unter Aspekten eine Technologie zur Lösung eines engen Problembereichs verstehe, deren Größe möglicherweise mit der statischen Variablenfunktion von Java vergleichbar ist.
Wenn es stimmt, dass Aspekte eine enge Reihe von Problemen lösen und AOP keine Fehlbezeichnung ist, warum sollten dann nicht alle Programmiertechniken das Suffix "Orientierte Programmierung" erhalten, wie "Vererbungsorientierte Programmierung", "Abhängigkeit"? orientierte Programmierung "oder" bereichsorientierte Programmierung? "
quelle
Antworten:
Ich denke, dies ist ein wirklich zweifelhaftes Thema, da die Definition einer "Methodik" und eines "Paradigmas" und einer "-orientierten Programmierung" in diesem Zusammenhang möglicherweise etwas locker ist, aber ich werde Devil's Advocate spielen und mit " Ja, es ist eine Fehlbezeichnung ".
Selbst wenn Sie keine AOP- oder AOP-Funktionen zur Lösung eines Problems verwendet hätten, würden Sie immer noch über diese Aspekte nachdenken - Sie könnten sie irgendwo als Dokumentation schreiben lassen oder Sie könnten einen Codegenerator verwenden - so oder so, das Konzept von Aspekten ist immer noch da. Das könnte auch zu jedem Paradigma passen; Obwohl es ziemlich hässlich wäre, könnten Sie in C immer noch OOP machen.
Würde das nicht bedeuten, dass AOP genauso eine Methodik ist wie OOP? Ich denke, da steckt noch mehr dahinter.
Der Grund ist, dass eine Methodik eine Lösung für eine bestimmte Art von Problem bietet . Sie verwenden nicht mehr als eine Methode, um ein konzeptionelles Problem zu lösen, obwohl Sie im größeren Schema möglicherweise zwei oder mehr verwenden. Sie können OOP und Prozedur verwenden, um eine Dateneingabe-Benutzeroberfläche zu schreiben, aber Sie verwenden nur OOP, um die abstrakte Struktur der Benutzeroberfläche zu beschreiben, und Sie verwenden nur Prozeduren (genauer Methoden), um deren Verhalten zu beschreiben. In den Kernbestandteilen eines Problems schließen sich Methoden gegenseitig aus - und AOP kann weiterhin an der Lösung eines Problems mit Funktions-, OOP- oder Verfahrenscode teilnehmen.
AOP löst Probleme in dem Sinne, dass es die Menge an wiederholtem Code reduziert, aber das liegt gut in der Jobbeschreibung eines Sprachfeatures. Sie haben kein wirkliches Problem konzeptionell gelöst, indem Sie gesagt haben, dass Sie den Compiler oder die Laufzeit dazu bringen, Code einzufügen, den Sie nicht explizit schreiben mussten. Sie haben Ihren Code gerade etwas übersichtlicher gestaltet. Zu erklären, dass "alle meine Funktionen ihre Start- und Endzeiten protokollieren", ist keine Lösung für ein Problem. Es ist nur eine Problemstellung.
Ich denke, es wäre angemessener, wenn sie einfach als Sprachmerkmale "Aspekte" genannt würden.
quelle
Alle Entwicklungsmethoden sind lediglich Denkweisen zur Organisation von Code. Jede Entwicklungsmethode kann sehr unterschiedlich aussehenden Code oder ähnlichen Code erzeugen. Sie benötigen möglicherweise auch Bibliotheken oder Sprachfunktionen zur Unterstützung.
In C ++ wird AOP beispielsweise normalerweise mithilfe von Merkmalsklassen und Polymorphismus zur Kompilierungszeit implementiert. Es ist überhaupt keine Sprachfunktion - Sie erstellen die verschiedenen Aspekte Ihres Typs und kombinieren sie mit Vorlagen, wie Sie möchten.
In Sprachen wie Java, die keine Vorlagen haben, müssen Sie am Ende dedizierte Sprachfunktionen verwenden, die von Präprozessoren (z. B.
AspectJ
) bereitgestellt werden, um aspektorientiert zu programmieren, einfach weil die Originalsprache nicht über die entsprechenden Funktionen verfügt Implementierung von True AOP selbst.Infolgedessen sehen AOP-Programme in C ++ im Vergleich zu Java ganz anders aus. Am wichtigsten ist jedoch, wie der Programmierer über sein Design denkt und nicht darüber, wie der Code aussieht.
Daher ist AOP sicherlich eine Entwicklungsmethode.
quelle
Hier spielen zwei Dinge eine Rolle - das Programmierparadigma im Vergleich zur Softwareentwicklungsmethode .
Ja, aspektorientierte Programmierung ist ein Programmierparadigma. Es nutzt bestimmte Sprachfunktionen, um die Konstrukte darzustellen, die entweder zur Ausführung einer Aufgabe oder zur besseren Lesbarkeit des Codes erforderlich sind. Es ist eine Technik, die von einem Programmierer angewendet werden kann. Häufig wird AOP neben der objektorientierten Programmierung verwendet, um Querschnittsthemen zu beseitigen. Sie können jedoch auch eine aspektorientierte Programmierung über eine funktionale Sprache hinaus implementieren. Es ist nicht unbedingt ein völlig neues Paradigma, sondern eine Erweiterung von OOP und funktionaler Programmierung, um bekannte Probleme zu lindern. Der Hauptgrund, warum ich glaube, dass es als Paradigma betrachtet werden sollte, ist, dass es die Art und Weise ändert, wie Sie über eine Lösung des Problems nachdenken. Genau wie die funktionale Programmierung, die prozedurale Programmierung, die Logikprogrammierung und die objektorientierte Programmierung drastisch unterschiedliche Lösungen für dasselbe Problem haben, fügt die aspektorientierte Programmierung dem Problemsatz eine weitere Lösung hinzu.
Nein, aspektorientierte Programmierung ist keine Entwicklungsmethode. Eine Entwicklungsmethode ist ein Framework, mit dem Sie ein Softwaresystem erstellen können. Es gibt an, welche Aufgaben Sie ausführen und wie Sie sie ausführen, von den Anforderungen bis zum Ende der Lebensdauer. AOP sagt nichts darüber. Einige Programmierparadigmen haben jedoch zu entwicklungsmethodischen Ansätzen für den Software-Lebenszyklus geführt. Es gab einen Ansatz namens Object-Oriented Software Engineering, der von Ivar Jacobson entwickelt wurdeDas Unternehmen hat einen vollständigen Lebenszyklus für das Entwerfen und Entwickeln objektorientierter Systeme festgelegt, ist jedoch in Ungnade gefallen und wurde durch UML und den Rational Unified Process ersetzt. Ich sehe ehrlich gesagt nicht, dass AOP die Methoden so beeinflusst wie OOP. Tatsächlich scheint ein Blick auf Trends darauf hinzudeuten, dass Methoden die Sprache und Paradigmen überschreiten sollten, die zum Erstellen der Software verwendet wurden. Es gibt möglicherweise AOP-fokussierte Modellierungstechniken und Vokabeln, die während des Entwurfs und der Entwicklung verwendet werden, aber ich sehe keine vollständige Methodik, die sich auf AOP konzentriert.
quelle