Nachdenken (Computerprogrammierung)

In der Informatik ist Nachdenken die Fähigkeit eines Computerprogramms zu untersuchen (sieh Typ-Selbstbeobachtung), und modifizieren Sie die Struktur und das Verhalten (spezifisch die Werte, Meta-Daten, Eigenschaften und Funktionen) von einem Gegenstand an der Durchlaufzeit.

Nachdenken wird meistens auf virtuellen Maschinenprogrammiersprachen auf höchster Ebene wie Plausch und scripting Sprachen und auch auf offenbar getippten und/oder statisch getippten Programmiersprachen wie Java, C, ML und Haskell verwendet.

Historischer Hintergrund

Die frühsten Computer wurden auf ihrer heimischen Zusammenbau-Sprache programmiert, die von Natur aus reflektierend ist, weil sie durch das Definieren der Instruktionen als Daten programmiert wird. Reflektierende Funktionalität wie das Ändern der Instruktionen oder Analysieren von ihnen war gewöhnlich. Als Programmierung bewegt in höhere Niveau-Sprachen wie C ist diese Praxis verschwunden, bis Programmiersprachen mit dem Nachdenken in ihrem Typ-System erschienen sind.

Die 1982-Doktorarbeit von Brian Cantwell Smith hat den Begriff des rechenbetonten Nachdenkens auf Programmiersprachen und den Begriff des meta-kreisförmigen Dolmetschers als ein Bestandteil von 3-Lispeln-eingeführt.

Gebrauch

Nachdenken kann verwendet werden, um Programm-Ausführung an der Durchlaufzeit zu beobachten und/oder zu modifizieren. Ein Nachdenken-orientierter Programm-Bestandteil kann die Ausführung einer Einschließung des Codes kontrollieren und kann sich gemäß einer gewünschten mit dieser Einschließung verbundenen Absicht modifizieren. Das wird normalerweise durch das dynamische Zuweisen des Programm-Codes an der Durchlaufzeit vollbracht.

Im Gegenstand das orientierte Programmieren von Sprachen wie Java erlaubt Nachdenken Inspektion von Klassen, Schnittstellen, Feldern und Methoden an der Durchlaufzeit, ohne die Namen der Schnittstellen, Felder, Methoden während der Übersetzung zu wissen. Es erlaubt auch instantiation von neuen Gegenständen und Beschwörung von Methoden.

Nachdenken kann auch verwendet werden, um ein gegebenes Programm an verschiedene Situationen dynamisch anzupassen. Denken Sie zum Beispiel eine Anwendung, die zwei verschiedene Klassen verwendet und austauschbar ähnliche Operationen durchzuführen. Ohne Nachdenken-orientierte Programmierung könnte die Anwendung hart codiert werden, um Methode-Namen der Klasse und Klasse zu nennen. Jedoch, mit dem Nachdenken-orientierten Programmierparadigma, konnte die Anwendung entworfen und geschrieben werden, um Nachdenken zu verwerten, um Methoden in Klassen und ohne hart codierende Methode-Namen anzurufen. Nachdenken-orientierte Programmierung verlangt fast immer zusätzliche Kenntnisse, Fachwerk, und Gegenstand-Relevanz Verwandtschafts-kartografisch darzustellen, um mehr allgemeine Codeausführung auszunutzen. Hartes Codieren kann im Ausmaß vermieden werden, dass Nachdenken-orientierte Programmierung verwendet wird.

Nachdenken wird häufig als ein Teil der Softwareprüfung, solcher bezüglich der Durchlaufzeit creation/instantiation von nachgemachten Gegenständen verwendet.

Nachdenken ist auch eine Schlüsselstrategie für metaprogramming.

Durchführung

Ein Sprachunterstützen-Nachdenken stellt mehrere Eigenschaften zur Verfügung, die an der Durchlaufzeit verfügbar sind, die sonst sehr dunkel sein würde, um auf einer Sprache der niedrigeren Ebene zu vollbringen. Einige dieser Eigenschaften sind die geistigen Anlagen zu:

  • Entdecken Sie und modifizieren Sie Quellcodeaufbauten (wie Codeblöcke, Klassen, Methoden, Protokolle, usw.) als ein erstklassiger Gegenstand an der Durchlaufzeit.
  • Wandeln Sie eine Schnur um, die den symbolischen Namen einer Klasse oder Funktion in eine Verweisung auf oder Beschwörung dieser Klasse oder Funktion vergleicht.
  • Bewerten Sie eine Schnur, als ob es eine Quellcodebehauptung an der Durchlaufzeit war.
  • Schaffen Sie einen neuen Dolmetscher für den bytecode der Sprache, um eine neue Bedeutung oder Zweck für eine Programmierkonstruktion zu geben.

Diese Eigenschaften können unterschiedlich durchgeführt werden. Im MUHEN bildet Nachdenken einen natürlichen Teil des täglichen Programmieridioms. Wenn Verben (Methoden), verschiedene Variablen wie Verb (der Name des Verbs genannt werden, das wird nennt) und das (der Gegenstand, auf dem das Verb genannt wird), werden bevölkert, um den Zusammenhang des Anrufs zu geben. Sicherheit wird normalerweise durch das Zugreifen auf den Anrufer-Stapel programmatisch geführt: Da Anrufer eine Liste der Methoden sind, durch die das aktuelle Verb schließlich genannt wurde, erlaubt das Durchführen von Tests auf Anrufern [1] (der Befehl, der vom ursprünglichen Benutzer angerufen ist), dem Verb, sich gegen den unerlaubten Gebrauch zu schützen.

Kompilierte Sprachen verlassen sich auf ihr Laufzeitsystem, um Auskunft über den Quellcode zu geben. Ein kompiliertes Ziel-C rechtskräftig registriert zum Beispiel die Namen aller Methoden in einem Block des rechtskräftigen, einen Tisch zur Verfügung stellend, um diese den zu Grunde liegenden Methoden (oder Auswählende für diese Methoden) kompiliert ins Programm zu entsprechen. Auf einer kompilierten Sprache, die Laufzeitentwicklung von Funktionen wie Allgemeines Lispeln unterstützt, muss die Laufzeitumgebung einen Bearbeiter oder einen Dolmetscher einschließen.

Nachdenken kann für Sprachen durchgeführt werden, die nicht eingebaute Nachdenken-Möglichkeiten durch das Verwenden eines Programm-Transformationssystems haben, um automatisierte Quellcodeänderungen zu definieren.

Beispiele

Die folgenden Codeschnipsel schaffen ein Beispiel der Klasse, und rufen seine Methode an. Für jede Programmiersprache werden normale und Nachdenken-basierte Aufruffolgen gezeigt.

ECMAScript

Der folgende ist ein Beispiel in ECMAScript, und gilt deshalb auch für JavaScript und ActionScript:

//Ohne Nachdenken

neuer Foo .hello

//Mit dem Nachdenken

//das Annehmen, dass Foo in diesem wohnt

neu dieser ['Foo'] ['hallo']

//oder ohne Annahme

neu (eval ('Foo')) ['hallo']

//oder einfach

eval ('neuer Foo .hello ')

</Quelle>

Java

Der folgende ist ein Beispiel in Java mit dem javanischen Paket:

//Ohne Nachdenken

neuer Foo .hello ;

//Mit dem NachdenkenKlasse

clazz.getMethod ("hallo").invoke (clazz.newInstance );

</Quelle>

PHP

Der folgende ist ein Beispiel in PHP:

//ohne Nachdenken

$foo = neuer Foo ;

$foo-> hallo ;

//mit dem Nachdenken

$reflector = neuer ReflectionClass ('Foo');

$foo = $reflector-> newInstance ;

$hello = $reflector-> getMethod ('hallo');

$hello-> rufen ($foo) an;

//das Verwenden der Rückrufaktion

$foo = neuer Foo ;

call_user_func (Reihe ($foo, 'hallo'));

//das Verwenden variabler Variable-Syntax

$className = 'Foo';

$foo = neuer $className ;

$method = 'hallo';

$foo->$method ;

</syntaxhighlight>

Siehe auch

Referenzen

Dokumente

Weiterführende Literatur

  • Ira R. Forman und Nate Forman, javanisches Nachdenken in der Handlung (2005), internationale Standardbuchnummer 1-932394-18-4
  • Ira R. Forman und Scott Danforth, Metaclasses Stellend (um 1999), internationale Standardbuchnummer 0-201-43305-2 Zu arbeiten

Links


Strang-Beziehung / Oryx
Impressum & Datenschutz