Referentielle Transparenz

Referentielle Transparenz

Die Referenzielle Transparenz besagt, dass der Wert eines Ausdrucks in einem Quelltext nur von seiner Umgebung abhängt und nicht vom Zeitpunkt seiner Auswertung. Dies ist eine wichtige Eigenschaft des deklarativen Programmierparadigmas.

In der Mathematik gilt, dass ein und dieselbe Variable an verschiedenen Stellen ihres Geltungsbereichs immer den gleichen Wert hat. Dies gilt in imperativen Programmiersprachen nicht, da die Programmsemantik (z. B. Endergebnis) von einem impliziten Zustand (z. B. Speicherinhalt) abhängt.

x = x + 1

Formal analysiert ist diese Gleichung eine nicht lösbare Aussage, was heißt, es existiert kein x, das die Gleichung wahr macht. Trotzdem ist diese Zeile in imperativen Programmiersprachen möglich. Je nachdem, was in der Speicherzelle für x steht, wird die rechte Seite damit erzeugt und die linke Seite berechnet.

Möchte man aber Programmeigenschaften mathematisch beweisen (z. B. liefert das Programm wirklich das, was es soll), dann dürfen solche Nebeneffekte nicht auftreten. In der deklarativen Programmierung gilt hingegen das Prinzip der referenziellen Transparenz und als Konsequenz daraus das Substitutionsprinzip. Danach kann ein Ausdruck immer durch einen anderen gleichen Wertes ersetzt werden ohne dass dies Auswirkungen auf die Programmsemantik hat. Das Ziel von solchen Programmtransformationen ist die Ersetzung von aufwändig durch einfach zu berechnende Ausdrücke.

Das Prinzip der referenziellen Transparenz wirft aber auch Probleme auf. So ist das einfache Auslesen eines mit der Tastatur eingegeben Zeichens nicht direkt möglich; solch eine Funktion - wie getchar in C - ist nicht erlaubt. Jedes Mal wäre der Rückgabewert abhängig von der Eingabe des Benutzers. Damit entstünden Kommunikationsprobleme mit der Umgebung.

So werden z. B. in Haskell Aktionen, die mit der Umgebung interagieren können, als Werte des Datentyps IO beschrieben. Mittels spezieller Operatoren können aus elementaren Aktionsbeschreibungen komplexe Beschreibungen konstruiert werden. Jedes Haskell-Programm definiert eine Variable main, deren Wert eine Aktionsbeschreibung des gesamten Programms ist. Aktionen können ausgeführt werden, indem ihre Beschreibung in den Wert von main eingebettet wird.


Wikimedia Foundation.

Игры ⚽ Поможем решить контрольную работу

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Fpii — ist eine funktionale und objektorientierte Programmiersprache, die auf den von John Backus vorgeschlagenen FP Systemen aufbaut. Die Objektorientierung ist auf die Polymorphie der Methoden in einem Klassenobjekt samt Vererbung reduziert. Da es in… …   Deutsch Wikipedia

  • Bedarfsauswertung — Lazy Evaluation ist eine Technologie in der Informatik, bei der das Ergebnis eines Ausdrucks nur so weit berechnet wird, wie es gerade benötigt wird. Der Vorteil einer solchen Auswertungsstrategie ist Zeitersparnis, da Funktionsaufrufe ganz… …   Deutsch Wikipedia

  • Globale Variable — In der Programmierung ist eine Variable im allgemeinsten Sinne einfach ein Behälter für Rechnungsgrößen („Werte“), die im Verlauf eines Rechenprozesses auftreten. Im Normalfall wird eine Variable durch einen Namen bezeichnet und hat eine… …   Deutsch Wikipedia

  • Lokale Variable — In der Programmierung ist eine Variable im allgemeinsten Sinne einfach ein Behälter für Rechnungsgrößen („Werte“), die im Verlauf eines Rechenprozesses auftreten. Im Normalfall wird eine Variable durch einen Namen bezeichnet und hat eine… …   Deutsch Wikipedia

  • Speicherinterferenz — In der Programmierung ist eine Variable im allgemeinsten Sinne einfach ein Behälter für Rechnungsgrößen („Werte“), die im Verlauf eines Rechenprozesses auftreten. Im Normalfall wird eine Variable durch einen Namen bezeichnet und hat eine… …   Deutsch Wikipedia

  • Startwert — In der Programmierung ist eine Variable im allgemeinsten Sinne einfach ein Behälter für Rechnungsgrößen („Werte“), die im Verlauf eines Rechenprozesses auftreten. Im Normalfall wird eine Variable durch einen Namen bezeichnet und hat eine… …   Deutsch Wikipedia

  • Variablenüberwachung — In der Programmierung ist eine Variable im allgemeinsten Sinne einfach ein Behälter für Rechnungsgrößen („Werte“), die im Verlauf eines Rechenprozesses auftreten. Im Normalfall wird eine Variable durch einen Namen bezeichnet und hat eine… …   Deutsch Wikipedia

  • Deklarative Programmiersprache — Die deklarative Programmierung ist ein Programmierparadigma, bei dem die Beschreibung des Problems im Vordergrund steht. Der Lösungsweg wird dann automatisch ermittelt. Zu den deklarativen Programmiersprachen gehören: funktionale Sprachen (z. B.… …   Deutsch Wikipedia

  • FP-System — Dieser Artikel wurde aufgrund von inhaltlichen Mängeln auf der Qualitätssicherungsseite der Redaktion Informatik eingetragen. Dies geschieht, um die Qualität der Artikel aus dem Themengebiet Informatik auf ein akzeptables Niveau zu bringen. Hilf… …   Deutsch Wikipedia

  • Lazy Evaluation — ist eine Technologie in der Informatik, bei der das Ergebnis eines Ausdrucks nur so weit berechnet wird, wie es gerade benötigt wird. Ein Vorteil einer solchen Auswertungsstrategie ist Zeitersparnis, da Funktionsaufrufe ganz vermieden oder… …   Deutsch Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”