Behandlung von Zustände und Methoden im Rahmen der Lehre der Programmiersprache Java. (Java Methoden Methode Zustand Zustände), Lektion, Seite 721823
https://www.purl.org/stefan_ram/pub/java_zustand_de (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
Java-Kurs

Wirkauswertungen in Java 

Wir erinnern hier durch das folgende Beispielprogramm zunächst an die Meßmethode »java.lang.System.getProperty«.

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

Der Wert von »java.lang.System.setProperty« ist wie bei »java.lang.System.getProperty« der Wert der Eigenschaft, die als erstes Argument angegeben wurde. Zusätzlich wird der Wert des Zustandes nach dem Auslesen auf die als zweites Argument angegebene Zeichenfolge gesetzt. Die Auswertung des Aufrufs hat also auch eine Wirkung.

Main.java

public final class Main
{ public static void main( final java.lang.String[] args )
{

/* user.country ist "DE" */

java.lang.System.out.println( java.lang.System.setProperty( "user.country", "IT" ));

/* user.country ist "IT" */

java.lang.System.out.println( java.lang.System.setProperty( "user.country", "FR" ));

/* user.country ist "FR" */

}}

transcript
DE
IT
Aussprachehinweis
property ˈprɑp ɚ ti

In dem voranstehenden Programm ist der Wert des zweiten Aufrufs von »setProperty« daher der mit dem ersten Aufruf für die Eigenschaft »x« festgelegte Wert »IT«.

Dieses Geschehen beschreibt man indem man sagt, daß der erste Aufruf den Wert »IT« in die Eigenschaft geschrieben habe, und der zweite Aufruf ihn dann wieder aus der Eigenschaft gelesen habe.

Auf diese Weise ist es möglich, daß eine Ausgabeanweisung Informationen  an eine später ausgeführt Anweisung übermittelt : Die erste Anweisung schreibt  die Information und die zweite kann sie dann lesen.

Auch eine Ausgabe ist eine Wirkung, da sie etwas verändert (nämlich die Schreibfläche oder ein anderes Speichermedium).

In der Regel bedeutet „Schreiben“ Wirken. „Lesen“ erfolgt durch eine Auswertung, deren Wert von der Umgebung abhängt.

Auswertung und Welt
                                    Aktor
Steuern
Ausgeben
.----------------------. Schreiben .----------------------.
| Auswertung | Ursache Wirkung | Welt |
| |---------------------------->| |
| | | |
| |<----------------------------| |
| | Wirkung Ursache | |
'----------------------' Lesen '----------------------'
Einlesen
Messen
Sensor

Obwohl das Einlesen auch eine Wirkung ist (eine Einwirkung der Welt auf eine Auswertung), dankt man beim Programmieren bei „Wirkung“ an eine Auswirkung einer Auswertung auf die Umwelt.

Werte und Wirkungen

Durch Auswertung von Ausdrücken kann unser Programm also mit einer Wirkung  die Welt verändern und umgekehrt kann es Informationen über die Welt als Wert  einer Auswertung erhalten. Auf diese Weise kann ein Computerprogramm Informationen ausgeben  (schreiben) und messen  (aufnehmen, einlesen).

Während eine Messung  eine Beeinflußung des Wertes einer Auswertung durch die Ausführungsumgebung darstellt, ist eine Wirkung  umgekehrt eine Veränderung der Umgebung durch eine Auswertung.

Die bloße Ermittlung eines Wertes für einen Ausdruck im Rahmen einer Auswertung gilt nicht  als eine Wirkung. Kurz gesagt:

Ein Wert ist keine Wirkung.

Beispielsweise gilt die Berechnung eines Wertes durch Auswertung von »java.lang.Math.floor( 2.7 )« nicht  als Wirkung.

Der Wert eines Ausdrucks ist flüchtig (temporär) und verschwindet kurz nach dem Ende der Auswertung im allgemeinen wieder. Die durch eine Wirkung herbeigeführte Veränderung bleibt hingegen oft bis auf weiteres bestehen.

Merkformel
Wert ≠ Wirkung
Aussprachehinweis
floor ˈflɔɚ

Verhalten

Wir hatten bisher behandelt, daß eine Auswertung einen Wert ergeben kann, und nun lernen wir, daß sie auch noch eine Wirkung haben kann. Beides zusammen, also Wert und Wirkung einer Auswertung gemeinsam, nennen wir das Verhalten  dieser Auswertung. Um zu verstehen, was eine Auswertung bedeutet, muß man ihr Verhalten kennen.

Der Satz „Das Verhalten der Methode ändert sich nicht.“ bedeutet beispielsweise, daß weder der Wert noch die Wirkung der Methode sich verändert.

Auswertungen (und Methoden) kann man charakterisieren, indem man ihren Wert und ihre Wirkung angibt.

Merkformel
Verhalten = Wert + Wirkung

Das Verhalten ist all das, was man normalerweise vom Ablauf einer Operation beobachten kann.

Falls eine Auswertung nur einen Wert ergibt, aber keine Wirkung hat, so hat sie trotzdem ein Verhalten; es besteht in diesem Fall dann nur aus dem Wert.

Falls eine Auswertung nur eine Wirkung ergibt, dann ist ihr Verhalten diese Wirkung.

Wenn man beispielsweise fragt „Welches Verhalten hat dieser Aufruf?“, dann will man wissen, welchen Wert seine Auswertung ergibt und  welche Wirkung sie hat.

Wenn man beispielsweise sagt „Diese beiden Auswertungen haben dasselbe Verhalten“, dann sagt man damit, daß sie denselben Wert ergeben und  dieselbe Wirkung haben.

Bisherige Bestimmung des Ergebnisses einer Methodenoperation
Methode         Argumentwerte
| |
'---------.---------'
|
v
Operation
|
v
Ergebniswert

Bisher haben wir nur die linke Seite des obigen Diagramms behandelt.

Neue Bestimmung des Verhaltens einer Methodenoperation
Methode         Argumentwerte
| | . - - - - -.<- - - -
'---------.---------' ^
| | |
|
v v |
Operation Zustand
| | |
'--------------.--------------'
| |
v Umgebung / Umwelt
Verhalten |
|
.--------------'--------------. |
| |
v v |
Ergebniswert Wirkung
| |

| |
' - - - - -'- - - >

Die Argumentwerte und der Zustand der Umgebung können das Verhalten eines Aufrufs beeinflussen. Wie diese Beeinflussung genau aussieht, wird in der Dokumentation der Methode beschrieben.

Bisher haben wir nur die linke Seite des obigen Diagramms behandelt.

Die Auswertungen von Literalen und der bisher behandelten Operatorausdrücke sind deterministisch (das heißt, die Werte von Literalen sind durch die Zeichen des Literals und die Werte von Operatorausdrücken durch den Operator und die Werte seiner Operanden bestimmt) und haben keine  Wirkungen. Das Verhalten von Aufrufen und seine Abhängigkeiten sind in der jeweiligen Dokumentation der aufgerufenen Methode beschrieben.

Wir konnten Ausdrück bisher verwenden, um Werte  auszudrücken. Nun können wir sagen, daß man mit einem Ausdruck ein bestimmtes Verhalten  ausdrückt.

Die Dokumentationen von Wirkungen

Im folgenden zeigen wir die Dokumentation von »java.lang.System.setProperty«.

Die Dokumentation von »java.lang.System.setProperty« (verändert und übersetzt)
java.lang
Class System
public static java.lang.String setProperty( java.lang.String key, java.lang.String value )
Setzt die Eigenschaft "key" auf den Wert "value".
Wert: Ergibt den vorherigen Wert der Eigenschaft "key".

Eine eventuelle Zustandsabhängigkeit oder Wirkung einer Auswertung eines Aufrufs einer Methode, ist in der Dokumentation jener Methode beschrieben.

Ein Verb (im Sinne eines englischen oder deutschen Tätigkeitswortes) kann als Anzeiger einer Wirkung  angesehen werden, wenn es nicht „ergibt“ oder ein Synonym davon ist, sondern eine Veränderung, wie hier das Verb „setzt“, beschreibt.

Beschreiben Verben eine Wirkungen, die nicht nur darin besteht, daß sich ein Wert ergibt, so hat die Auswertung eines Aufrufs der beschrieben Methode eben jene Wirkung.

Das Verb „wandelt“ steht eigentlich für eine Veränderung, aber es wird oft zur Beschreibung des Wertes  einer Auswertung verlangt und steht daher nicht immer für eine Wirkung. Beispielsweise bedeutet „Die Methode »toDegrees« wandelt den Argumentwert in Grad.“ oft soviel wie „Der Wert eines Aufrufs der Methode »toDegrees« ist die Umwandlung des Argumentwertes in Grad.“.

Der Wert ist in der Dokumentation meist deutlicher als die Wirkung gekennzeichnet, nämlich mit „Wert“ (englisch “Returns ”).

»java.lang.System.getProperty« und »java.lang.System.setProperty«

Die folgende Tabelle zeigt, inwiefern Auswertungen von Aufrufen von »java.lang.System.getProperty« und »java.lang.System.setProperty« einen Wert ergeben, wirken beziehungsweise messen.

Vergleich

Wert Wirken Messen

java.lang.System.getProperty Ja Nein Ja

java.lang.System.setProperty Ja Ja Ja

Der sprachliche Ausdruck des Verhaltens

Es läßt sich beobachten, daß Werte in der Regel mit Substantiven  beschrieben werden und Wirkungen mit Verben.

Der Wert des Ausdrucks »2 + 3« ist die Zahl Fünf  (Substantiv).

Die Auswertung von »java.lang.System.setProperty( "user.country", "CH" )« schreibt  (Verb) die Zeichenfolge »CH« in den Speicher.

Die Bedeutung eines Aufrufs

Bisher  wurde die Semantik der Auswertung eines Ausdrucks dadurch beschrieben, daß angegeben wurde, welchen Wert  die Auswertung ergibt. Nun  wird die Semantik dahingehend erweitert, daß die Auswertung auch eine Wirkung  haben kann. Die Bedeutung eines Aufrufs wird also vollständig dadurch angegeben, daß gesagt wird,

Hinweis zum Gebrauch von »java.lang.System.setProperty«

⚠ In dieser Lektion wurde die Methode »java.lang.System.setProperty« zur Erklärung des wichtigen Umgebungsbegriffs herangezogen. In der Praxis spielt diese Methode jedoch nur eine untergeordnete Rolle. Daher ist die Verwendung dieser Methode in dieser Lektion nicht  als Empfehlung zu verstehen, diese Methode zur Speicherung von Informationen zu verwenden. Dafür gibt es in Java  meist bessere Möglichkeiten, die später vorgestellt werden werden. Die Methode »java.lang.System.setProperty« kann am Ende dieses Kapitels erst einmal wieder vergessen werden!

⚠ In dieser Lektion wurde die Methode »java.lang.System.setProperty« zur Veränderung des Wertes der Eigenschaft »user.country« verwendet. Diese diente hier aber nur der Veranschaulichung  von Wirkungen. Für Anwendungsprogramme ist es nicht empfehlenswert, jene Eigenschaft auf jene Weise zu verändern!

Übungsfragen

?   Werte und Wirkungen ⃗

Die Dokumentation von »java.lang.System.setProperty« (verändert und übersetzt)
java.lang
Class System
public static java.lang.String setProperty( java.lang.String key, java.lang.String value )
Setzt die Eigenschaft "key" auf den Wert "value".
Wert: Ergibt den vorherigen Wert der Eigenschaft "key".
Die Dokumentation von »java.lang.Math.toDegrees« (übersetzt, vereinfacht und verändert)
java.lang
Class Math
static double toDegrees( double x )
Wandelt den angegebenen Radiant-Winkel-Wert x in Grad um.
Aussprachehinweise
to degrees tuː dɪ ˈgriːz (n)

Geben Sie zu den folgenden Ausdrücken jeweils an, ob ihre Auswertung einen Wert ergibt und/oder eine Wirkung hat.

?   Messungen ⃗

Bei welchem der folgenden vier Ausdrücke hängt das Verhalten noch von etwas anderem als den Argumentwerten ab?

?   Ausgabe

Sagen Sie die Ausgabe des folgenden Programms voraus, ohne das Programm zu starten!

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println( java.lang.System.setProperty( "user.country", "CA" ));
java.lang.System.out.println( java.lang.System.getProperty( "user.country" ));
java.lang.System.out.println( java.lang.System.setProperty( "user.country", "CH" )); }}

Zusatzfrage *

?   Ausgabe *

Sagen Sie die Ausgabe des folgenden Programms voraus, ohne das Programm zu starten!

Main.java

public final class Main
{ public static void main( final java.lang.String[] args )
{

java.lang.System.out.println
( java.lang.System.setProperty
( "user.country",
java.lang.System.setProperty
( "user.country", "GB" )));

java.lang.System.out.println
( java.lang.System.getProperty( "user.country" ));

}}

Dokumentation von Wirkungen *

Es ist schwieriger, zu beurteilen ob eine Methode eine Wirkung hat, als die Frage zu beantworten, ob sie einen Wert liefert, denn die Wirkung wird in der Dokumentation oft weniger explizit oder formal hingeschrieben. Anders ist dies in C++  wo die Wirkung (engl. “effect ”) immer ausdrücklich angegeben wird, wie folgende Zitate aus N3290 zeigen:

Zitat aus N3290

void operator delete[](void* ptr, void*) noexcept;

Effects: Intentionally performs no action.

Hier sagt die Dokumentation ausdrücklich, daß es keine  Wirkung gibt.

Zitat aus N3290

constexpr pair();

Effects: Value-initializes first and second.

Hier sagt die Dokumentation ausdrücklich, daß  es eine Wirkung gibt, nämlich die Wert-Initialisierung von “first ” und “second ” (was das bedeutet, wird in N3290 an anderer Stelle erklärt, ist hier aber nicht weiter wichtig).

In der Dokumentation von Java  muß man selber beurteilen, ob die Erklärung einer Methode eine Wirkung beschreibt oder nicht, weil die Beschreibung einer Wirkung darin normalerweise nicht ausdrücklich mit “Effects: ” gekennzeichnet ist.

Eigentlich hat fast jede Auswertung eine Wirkung: Durch ihre Aktivität erwärmt sie den Computer geringfügig. Solche nicht dokumentierten Wirkungen sieht man aber als irrelevant an. Normalerweise meint man mit der Wirkung einer Methode nur solch eine Wirkung, die auch in der Dokumentation der Methode beschrieben ist.

Wirkungen *

Unter Welt  verstehen wir hier alles, was es im Universum gibt, einschließliches des Speichers des Computers, seines Bildschirmes und so weiter.

In der Informatik nennt man die Welt auch Umgebung. Dabei denkt man manchmal insbesondere an die Welt in der Nähe des Computers, einschließlich des Speichers des Computers. Manchmal meint man mit Umgebung auch speziell den Speicher des Computers oder eine bestimmten Teil des Speichers.

Die Welt während der Ausführung eines Programmes wird auch als Ausführungsumgebung  bezeichnet; sie umgibt das Programm während seiner Ausführung.

Die Umgebung kann das Ergebnis einer Auswertung beeinflussen (hier kann man von einer Messung  sprechen oder von Lesen  oder Einlesen  sprechen). Umgekehrt kann eine Auswertung auch die Welt verändern, was man auch als eine Wirkung  bezeichnet; spezielle Arten von Wirkungen sind das Schreiben  eines Textes oder das Ausgeben  einer Information.

Durch eine Wirkung kann eine Auswertung etwas in der Welt verändern und/oder eine andere, spätere Auswertung beeinflussen.

Mögliches Zusammenspiel zwischen Welt und Auswertung
.----------------------.
| Welt |
| |
| |
| |
| |
'----------------------'
|
| Messung / Lesen / Einlesen
v
.----------------------.
| Auswertung |
| |
| |-----------> Meßwert
| |
| |
'----------------------'
|
| Wirkung / Schreiben / Ausgeben
v
.----------------------.
| Welt |
| |
| |
| |
| |
'----------------------'

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram721823 stefan_ram:721823 Java Methoden Methode Zustand Zustände Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd721823, slrprddef721823, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/java_zustand_de