Was sind die Unterschiede zwischen aspektorientierter, subjektorientierter und rollenorientierter Programmierung?

14

Ich weiß, dass es viele Artikel gibt, die diese drei Paradigmen beschreiben, aber ich suche nach einer schematischen Erklärung.

Es gibt hier ein paar sehr gute Beschreibungen der aspektorientierten Programmierung, daher stelle ich diese Frage in der Hoffnung, die Art von qualitativ hochwertigen Antworten zu erhalten, mit denen die Mitarbeiter von Stack Overflow vertraut sind.

Adam Lear
quelle
Dies ist wahrscheinlich eher eine Frage des Programmierers. Sie ist aber auch wirklich offen. Siehe stackoverflow.com/faq#dontask - "Ihre Fragen sollten einen angemessenen Umfang haben. Wenn Sie sich ein ganzes Buch vorstellen können, das Ihre Frage beantwortet, fragen Sie zu viel."
Merlyn Morgan-Graham
Ich würde damit beginnen, das Original von Thomas Kuhn zu lesen: amazon.com/Structure-Scientific-Revolutions-Thomas-Kuhn/dp/…
Ich kann mir auch eine kurze Antwort auf meine Frage vorstellen. So würde ich zum Beispiel die aspektorientierte Programmierung beschreiben: Es ist eine Möglichkeit, "Verarbeitungseinheiten", die als Aspekte bezeichnet werden, vor und nach anderen Verarbeitungseinheiten mit Hilfe von Pointcuts modular hinzuzufügen. Für mich ähnelt es einer regelbasierten Programmierung, zum Beispiel der Programmiersprache Inform7. inform7.com/learn/man/doc188.html

Antworten:

9

Man kann das beantworten, indem man ein Buch darüber schreibt. Hier ist jedoch ein grundlegender Vergleich

1. Fachorientierte Programmierung

Subjektorientierte Programmierung ist eine radikale Abkehr von der objektorientierten wie folgt. In OO werden Objekte intrinsisch definiert (dh basierend auf einem Modell, das es unabhängig beschreibt). und basierend darauf werden seine Attribute (Eigenschaften) und Methoden (Verhalten) abgeleitet. Die Anwendung macht nur den Gebrauchdieser Eigenschaften und Verhalten. Im Gegensatz dazu existiert (und modelliert) in der subjektorientierten Programmierung kein Objekt in einer solchen Isolation. Dabei wird aber das Verhalten der Objekte durch die verschiedenen anderen "Subjekte" der Objekte bereitgestellt, die sich dem Umfang und der Kontrolle des Autors des ursprünglichen Objekts entziehen. Betrachten Sie es als einen Weg, verschiedene "unabhängig definierbare Verhaltensweisen zu erweitern Ich denke, dies würde weit über die Definition von Vererbungsschablonen hinausgehen, verglichen mit dem, was hier diskutiert wird.

Der unbestrittene Ursprung von Begriffen (und Konzepten) stammt aus der Arbeit " Subject Oriented Programming: A Critique of Pure Objects , William Harrison und Harold Ossher". Hier ist noch ein gutes Papier . Obwohl ich persönlich glaube, dass dies ein theoretischer Rahmen ist. Ich weiß nicht, ob es irgendwelche Sprachen / Implementierungen gibt

Siehe dies , dies und das für mehr Infos.

2. Aspektorientierte Programmierung

Die aspektorientierte Programmierung ist aus dem Konzept der " Oncern-Trennung " hervorgegangen. Grundsätzlich wird die prozedurale oder objektorientierte Programmierung für übergreifende Anliegen erweitert. Über die Vereinfachung kann man sagen, dass Software funktionale und nicht funktionale Anforderungen hat . Diese übergreifenden Anforderungen umfassen Beispiele wie Protokollierung, Ausnahmebehandlung, Thread-Synchronisierung, Speicherverwaltung, Optimierung usw. Diese Querschnitt ASPEKTE sollte exprimierenden und getrennt und unabhängig voneinander auf beliebige andere Funktionsteile umgesetzt.
Eine umfassende Arbeit in diesem Bereich stammt von IBM . grundsätzlich betrifft jeder solche oderaspekte können unabhängig voneinander sein und einen mehrdimensionalen "interessensraum" bilden. , (lies das ).

Einige der guten praktischen Implementierungen von Aspect Oriented sind AspectJ und AspectC ++ und viele mehr . Sieh das .

3. Rollenorientiertes Programmieren
Wenn wir uns zu Agenten entwickeln, ist es oft notwendig, "Rollen" und Ziele zu definieren, bei denen die genauen Aktivitäten, die der Agent letztendlich ausführt, von der Umgebung abhängen, in der er sich befindet. Dies entspricht dem menschlichen konzeptuellen Verständnis.

Das Hauptziel besteht darin, das Ziel der Aufgabe von ihrer Kooperationsfähigkeit zu entkoppeln, indem explizite Konstrukte definiert werden, die als Kooperationsprozesse bezeichnet werden . Eine Rolle wird als Satz von Fähigkeiten und erwartetem Verhalten modelliert. Diese Ansätze ermöglichen jedoch auch die Modellierung der Ausführungsumgebung und wie Agent / Objekt die Umgebung ebenfalls wahrnehmen können. Sieh das .

In der Forschung werden verschiedene Frameworks für die rollenbasierte Modellierung und Implementierung vorgeschlagen. Einige davon sind ROPE , BRAIN , ALAADIN und mehr .

Dipan Mehta
quelle