Abhängigkeiten von Auswertungen in Java
Bisher haben wir uns nur damit beschäftigt, wie Argumentwerte und Operanden den Wert eines Aufrufs beeinflussen können. Jetzt werden wir sehen, daß der Wert eines Aufrufs auch noch von Zuständen abhängen kann, die im Aufruf nicht ausdrücklich erwähnt werden.
Der Wert einer Auswertung eines Aufrufs kann vom Argumentwert abhängen. So ergibt der Methodenname »java.lang.System.getProperty« für das Argument »"path.separator"« unter Umständen ein anderes Ergebnis als für das Argument »"user.country"«
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println( java.lang.System.getProperty( "path.separator" )); }}Protokoll
;
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println( java.lang.System.getProperty( "user.country" )); }}transcript
DE
- Aussprachehinweis
- property ˈprɑp ɚ ti
Abhängigkeit einer Auswertung von der Umgebung
Bei manchen Aufrufen, wie etwa bei »java.lang.Double.sum( 2.0, 4.0 )« ist das Ergebnis bereits durch den Quelltext des Aufrufes, also durch die Methode und die Argumentwerte, bestimmt. Der Ausdruck »java.lang.Double.sum( 2.0, 4.0 )« hat immer den Wert »6.0«.
Der Wert einer Auswertung kann aber auch noch der Umgebung abhängen, in der ein Programm läuft. Beispielsweise ergibt die Auswertung des Ausdrucks »java.lang.System.getProperty( "user.country" )« einen Wert, der davon abhängt, welches Land für den Rechner, auf dem das Programm läuft, eingestellt wurde.
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( java.lang.System.getProperty( "user.country" )); }}transcript
DE
transcript
US
Die Laufzeitumgebung oder Ausführungsumgebung enthält Eigenschaften (wie »user.country«) mit Werten (wie »DE«) und umgibt das Programm während seiner Ausführung.
(Die Eigenschaft »user.country« ist nicht unter jeder Java -Implementation schon beim Programmstart definiert. In diesem Fall erscheint »null« statt »DE«, und »user.country« kann dann im folgenden durch die stets definierte Eigenschaft »user.name« ersetzt werden.)
Der Wert eines Meßausdrucks hängt von der Umgebung (Welt) ab. Daher kann man aus diesem Wert dann Informationen über die Umgebung (Welt) entnehmen.
Der Begriff „Messen“ bezeichnet die Beeinflussung des Wertes einer Auswertung durch die Welt. Dadurch kann man dem Wert dann eine Information über die Welt entnehmen. Man kann statt „Messen“ auch von „Lesen“, „Einlesen“ oder „Aufnehmen“ sprechen.
Bestimmung des Ergebnisses eines Aufrufs
Aus einer Methode und Argumentwerten wird zunächst eine Inkarnation hergestellt, die eine Operation ergibt. Bei der Ausführung der Operation kommt es zu einer bestimmten Interaktion mit der Umgebung. Das Ergebnis ist dann durch die Methode, die Argumentwerte und die Ausführungsumgebung (und deren Interaktion mit der Operation) bestimmt.
- Bestimmung eines Ergebniswertes
Methode Argumentwerte
| |
'---------.---------'
|Inkarnation
|
v
Operation
|
|
Interaktion <--> Ausfuehrungsumgebung
|
v
Ergebnis- Methode
java.lang.System.getProperty(java.lang.String)
- Argumentwerte
"user.country"
- Inkarnation (Maschine)
- ›java.lang.System.getProperty‹ «"user.country"»
- Zustand der Umgebung bei der Ausführung der Aktion
...
user.country DE
user.language de
...- Ergebnis
"DE"
Die Zustandsabhängigkeit
Dieselbe Inkarnation kann unterschiedliche Ergebnisse liefern, wenn sie mit einem unterschiedlichen Zustand kombiniert wird. Beispielsweise liefert die Ausführung der Inkarnation ›java.lang.System.getProperty‹ ← «"user.country"» auf einem Rechner in der Bundesrepublik im allgemeinen ein anderes Ergebnis als auf einem Rechner in den Vereinigten Staaten.
Das Ergebnis des Aufrufs einer bestimmten Methode hängt im allgemein also von den Argumentwerten und dem Zustand des Rechners während des Ablaufs der Methode ab.
Ein Meßausdruck ist ein Ausdruck, dessen Wert eine Information über die Umgebung seiner Auswertung enthält. (Eine Meßmethode ist eine Methode, deren Aufruf ein Meßausdruck ist.)
Bei einer Messung wird eine Information über die Umgebung also als Wert eines Ausdrucks ausgedrückt.
Dokumentation der Zustandsabhängigkeit
Ob und wie das Ergebnis einer Methode im Einzelnen von einem Zustand bei ihrer Ausführung abhängt, ist jeweils in der Dokumentation der Methode beschrieben.
Aufnehmen, Einlesen, Messen
Wenn das Ergebnis einer Aktion durch den Zustand des Rechners bei ihrer Ausführung beeinflußt werden kann, so enthält jener Wert Informationen über jenen Zustand. Wir bezeichnen solch eine Aktion daher auch als die Aufnahme eines Wertes, Erhalten eines Wertes, das Einlesen eines Wertes oder als die Messung eines Wertes. Beispielsweise kann man mit der Inkarnation ›java.lang.System.getProperty‹ ← «"user.country"» das Land messen (einlesen, aufnehmen), das für den Rechner eingestellt wurde.
Determinismus ⃗
Bei den Methoden, die nach dem Vorbild mathematischer Funktionen gestaltet sind, ist der Wert des Aufrufs bereits durch die Methode und die Argumentwerte vollständig bestimmt, der Zustand spielt hier keine Rolle. Solche Methoden bezeichnet man auch als deterministisch, bei einer nicht-deterministischen Methode kann das Ergebnis auch noch durch den Zustand des Rechners während ihrer Ausführung beeinflußt sein.
Übungsaufgaben ⃗
/ Messen der Zeit ⃗
Geben Sie den Wert eines Aufrufs der Methode »java.lang.System.currentTimeMillis()« aus, um die aktuelle Zeit in Millisekunden seit 1970-01-01T00:00:00+01:00 zu erhalten. Wie groß ist der Wert ungefähr? Verändert sich der Wert, wenn das Programm etwas später erneut gestartet wird?