In der Informatik ist die subjektorientierte Programmierung ein objektorientiertes Softwareparadigma, in dem Zustand (Felder) und Verhalten (Methoden) von Objekten nicht als den Objekten selbst inhärent betrachtet werden, sondern durch verschiedene subjektive Wahrnehmungen („Subjekte“) der Objekte bestimmt werden. Der Begriff und die Konzepte wurden erstmals im September 1993 in einem Konferenzbeitrag [ 1 ] veröffentlicht , der später als einer der drei einflussreichsten Beiträge der Konferenz zwischen 1986 und 1996 anerkannt wurde [ 2 ]. Wie in diesem Beitrag veranschaulicht, wird eine Analogie zum Gegensatz zwischen den philosophischen Ansichten Platons und Kants hinsichtlich der Eigenschaften „realer“ Objekte hergestellt, jedoch auf Softwareobjekte angewendet. Beispielsweise nehmen wir alle einen Baum anhand seiner messbaren Höhe, seines Gewichts, seiner Blattmasse usw. wahr. Aus der Sicht eines Vogels kann ein Baum jedoch auch einen relativen Wert als Nahrungsquelle oder Nistplatz haben, oder aus der Sicht eines Steuerbeamten einen bestimmten Steuerwert in einem bestimmten Jahr. Weder die zusätzlichen Informationen des Vogels noch die des Steuerbeamten müssen als dem Baum innewohnend betrachtet werden, sondern ergeben sich aus deren Wahrnehmung. Laut Kants Analyse gilt dies möglicherweise sogar für Eigenschaften, die wir für intrinsisch halten.
Subjektorientierte Programmierung befürwortet die Organisation von Objektklassen in „ Subjekte “, die zu größeren Subjekten zusammengesetzt werden können. An Zugriffspunkten auf Felder oder Methoden können die Beiträge mehrerer Subjekte kombiniert werden. Diese Punkte werden als Verknüpfungspunkte [ 3 ] der Subjekte bezeichnet. Wird beispielsweise ein Baum gefällt, müssen die beteiligten Methoden möglicherweise das Verhalten der Subjekte „Vogel“ und „Steuereinnehmer“ mit dem Verhalten des Baumes selbst verknüpfen. Es handelt sich daher im Kern um eine Sichtweise der kompositionellen Natur der Softwareentwicklung, im Gegensatz zur algorithmischen (prozeduralen) oder repräsentativkeitsverbergenden (objektorientierten) Natur.
Beziehungen
Bezug zur aspektorientierten Programmierung
Die Einführung der aspektorientierten Programmierung im Jahr 1997 [ 4 ] warf Fragen nach ihrem Verhältnis zur subjektorientierten Programmierung sowie nach dem Unterschied zwischen Subjekten und Aspekten auf. Diese Fragen blieben einige Zeit unbeantwortet, wurden aber in dem 1999 eingereichten Patent für aspektorientierte Programmierung [ 5 ] behandelt , in dem zwei Punkte als charakteristische Unterschiede zum Stand der Technik hervortreten:
- Das Aspektprogramm umfasst sowohl a) einen Querschnitt, der einen Punkt in der Ausführung enthält, an dem querschnittliches Verhalten eingefügt werden soll; als auch b) eine Querschnittsaktion, die einen mit dem Querschnitt verknüpften Implementierungsteil enthält, wobei der Implementierungsteil computerlesbaren Programmcode enthält, der das querschnittliche Verhalten implementiert.
- Dieser Aspekt erzwingt transparent das übergreifende Verhalten von Objektklassen und anderen Software-Entitäten.
In der subjektorientierten Sichtweise kann der Querschnitt unabhängig vom Aspekt (Subjekt) platziert werden, und das Verhalten wird nicht durch den Aspekt erzwungen, sondern durch Kompositionsregeln bestimmt. Rückblickend [ 6 ] lässt sich die aspektorientierte Programmierung auch durch die Einführung und Nutzung des Konzepts eines abfrageähnlichen Punktschnitts auszeichnen , mit dem die von Aspekten verwendeten Verknüpfungspunkte allgemein festgelegt werden können.
In der Darstellung der subjektorientierten Programmierung wurden die Join-Points bewusst auf Feldzugriffe und Methodenaufrufe beschränkt, da gut konzipierte Frameworks an diesen Punkten funktionale Erweiterungen ermöglichen. Die Verwendung extern vorgegebener Pointcuts ist eine wichtige sprachliche Fähigkeit, bleibt aber eines der umstrittensten Merkmale der aspektorientierten Programmierung. [ 7 ]
Bezug zur aspektorientierten Softwareentwicklung
Um die Jahrtausendwende war deutlich, dass mehrere Forschungsgruppen unterschiedliche Technologien verfolgten, die die Komposition oder Verknüpfung separat verpackter Zustände und Funktionen zur Objektbildung nutzten. [ 8 ] Um dieses gemeinsame Forschungsfeld von der aspektorientierten Programmierung mit ihren spezifischen Patentdefinitionen abzugrenzen und zu betonen, dass die Kompositionstechnologie mehr als nur die Codierungsphase der Softwareentwicklung umfasst, wurden diese Technologien unter dem Begriff „ aspektorientierte Softwareentwicklung“ zusammengefasst . [ 9 ] Daraufhin wurde eine Organisation gegründet und eine Reihe internationaler Konferenzen zu diesem Thema ins Leben gerufen. Ähnlich wie die aspektorientierte Programmierung gelten auch die subjektorientierte Programmierung, Kompositionsfilter, die merkmalsorientierte Programmierung und adaptive Methoden als Ansätze der aspektorientierten Softwareentwicklung.
Abmessungen
Mehrdimensionale Trennung von Belangen, Hyper/J und die Belangmanipulationsumgebung
Die ursprüngliche Formulierung der subjektorientierten Programmierung sah sie bewusst als Verpackungstechnologie vor – wodurch der Raum der Funktionen und Datentypen in beide Richtungen erweitert werden konnte. Die ersten Implementierungen erfolgten für C++ [ 10 ] und Smalltalk [ 11 ] . Diese Implementierungen nutzten die Konzepte von Software-Labels und Kompositionsregeln, um die Verknüpfung von Subjekten zu beschreiben.
Um dem Anliegen Rechnung zu tragen, dass eine bessere Grundlage für die Analyse und Komposition von Software geschaffen werden sollte – nicht nur hinsichtlich ihrer Paketierung, sondern auch hinsichtlich der verschiedenen Belange, die diese Pakete adressieren –, wurde eine explizite Organisation des Materials in Form einer mehrdimensionalen „Matrix“ entwickelt, in der die Belange den Softwareeinheiten zugeordnet werden, die sie implementieren. Diese Organisation wird als mehrdimensionale Trennung von Belangen bezeichnet , und die sie beschreibende Arbeit [ 12 ] wurde als einflussreichste Arbeit der ICSE-Konferenz 1999 anerkannt. [ 13 ]
Dieses neue Konzept wurde für die Komposition von Java -Software implementiert, wobei das Werkzeug den Namen Hyper/J erhielt. [ 14 ]
Komposition und das Konzept des Subjekts lassen sich auf Softwareartefakte anwenden, die keine ausführbare Semantik besitzen, wie etwa Anforderungsspezifikationen oder Dokumentationen. Ein Forschungswerkzeug für Eclipse , die sogenannte Concern Manipulation Environment (CME), wurde bereits beschrieben [ 15 ]. In dieser Umgebung werden Werkzeuge für Abfrage, Analyse, Modellierung [ 16 ] und Komposition auf Artefakte in beliebigen Sprachen oder Darstellungen angewendet, indem geeignete Plug-in-Adapter zur Manipulation der Darstellung verwendet werden.
Als Nachfolger der Hyper/J-Kompositions-Engine [ 17 ] wurde im Rahmen von CME ein allgemeiner Ansatz für die verschiedenen Elemente einer Kompositions-Engine entwickelt:
- eine Abfragesprache mit Unifikation zur Identifizierung von Join-Punkten,
- ein flexibles Strukturbefestigungsmodell,
- eine verschachtelte Graphspezifikation zur Ordnung identifizierter Elemente,
- und eine Prioritätsreihenfolgespezifikation zur Lösung von Konflikten zwischen widersprüchlichen Regeln.
Sowohl Hyper/J als auch CME sind verfügbar, von alphaWorks [ 18 ] bzw. sourceforge, [ 19 ] aber keines der beiden wird aktiv unterstützt.
Fachorientierte Programmierung als „dritte Dimension“
Die Methodenaufrufung in der objektorientierten Programmierung kann als „zweidimensional“ betrachtet werden, da der ausgeführte Code sowohl vom Methodennamen als auch vom jeweiligen Objekt abhängt. Dies steht im Gegensatz [ 20 ] zur prozeduralen Programmierung, bei der ein Prozedurname direkt, also eindimensional, auf eine Unterroutine aufgelöst wird, sowie zur subjektorientierten Programmierung, bei der der Sender bzw. das Subjekt ebenfalls für den Aufruf relevant ist und somit eine dritte Dimension darstellt.
Siehe auch
Referenzen
- ^ William Harrison und Harold Ossher, Subjektorientierte Programmierung – Eine Kritik reiner Objekte, Proceedings der Konferenz über objektorientierte Programmiersysteme, Sprachen und Anwendungen von 1993, September 1993
- ^ „Preis für den einflussreichsten OOPSLA-Beitrag“ . www.sigplan.org .
- ^ Harold Ossher, Peri Tarr. Operation-Level Composition: A Case in (Join) Point, in ECOOP '98 Workshop Reader, 406–409
- Kiczales , G.; Lamping, J.; Mendhekar, A.; Maeda, C.; Lopes, C.; Loingtier, J. M.; Irwin, J. (1997). Aspektorientierte Programmierung (PDF) . ECOOP’97. Proceedings of the 11th European Conference on Object-Oriented Programming . LNCS . Band 1241, S. 220–242 . CiteSeerX 10.1.1.115.8660 . doi : 10.1007/BFb0053381 . ISBN 3-540-63089-9Die
- ^ Kickales; Gregor J.; Lampen; John O.; Lopes; Cristina V.; Hugunin; James J.; Hilsdale; Erik A.; Boyapati; Chandrasekhar, Aspect Oriented Programming, US-Patent 6.467.086, 15. Oktober 2002
- ^ William Harrison. Dekonstruktion und Rekonstruktion der Aspektorientierung, Siebter jährlicher Workshop zu den Grundlagen von Aspektsprachen, Brüssel, Belgien, 1. April 2008, herausgegeben von Gary T. Leavens, ACM Digital Library, 2008, S. 43-50
- ^ Friedrich Steimann. Der paradoxe Erfolg der aspektorientierten Programmierung, Proceedings der 21. jährlichen ACM SIGPLAN-Konferenz über objektorientierte Programmiersysteme, Sprachen und Anwendungen, Portland, Oregon, USA, 2006, S. 481–497
- ^ Communications of the ACM, Band 44, Nr. 10, Oktober 1994, S. 28-95
- ^ "Startseite" . AOSD.net .
- ^ Harold Ossher, Matthew Kaplan, William Harrison, Alexander Katz und Vincent Kruskal, Subjektorientierte Kompositionsregeln, Proceedings der Konferenz über objektorientierte Programmiersysteme, Sprachen und Anwendungen von 1995, Oktober 1995
- ^ Hafedh Mili, William Harrison, Harold Ossher, Unterstützung subjektorientierter Programmierung in Smalltalk, Proceedings of TOOLS USA 96, August 1996
- ^ Harold Ossher, Peri Tarr, William Harrison, Stanley Sutton, N Degrees of Separation: Multi-Dimensional Separation of Concerns, Proceedings of 1999 International Conference on Software Engineering, Mai 1999
- ^ "SIGSOFT - ACM Special Interest Group on Software Engineering" .
- ^ Harold Ossher, Peri Tarr. Hyper/J: Multidimensionale Trennung von Belangen für Java, Proceedings der 23. Internationalen Konferenz für Software-Engineering, Toronto, Ontario, Kanada, 2001, Seiten: 821 - 822
- ^ William Chung, William Harrison, Vincent Kruskal, Harold Ossher, Stanley M. Sutton, Jr., Peri Tarr, Matthew Chapman, Andrew Clement, Helen Hawkins, Sian January. Die Concern-Manipulationsumgebung, Proceedings der 27. internationalen Konferenz für Software-Engineering, Inhaltsverzeichnis, St. Louis, MO, USA, 2005
- ^ William Harrison, Harold Ossher, Stanley Sutton, Peri Tarr. Concern modeling in the concern manipulation environment, Proceedings of the 2005 workshop on Modeling and analysis of concerns in software, St. Louis, Missouri, 2005
- ^ William Harrison, Harold Ossher, Peri Tarr. General Composition of Software Artifacts, Proceedings of Software Composition Workshop 2006, März 2006, Springer-Verlag, LNCS 4089, Seiten 194-210
- ^ „Legacy Communities - IBM Community“ . 23. April 2009.
- ^ „Concern Manipulation Environment (CME)“ . 24. April 2015.
- ^ "Journal of Object Technology: Context Oriented Programming" .