robotik:lektion1:09_methodenaufrufe [NwT am Albert-Einstein-Gymnasium Reutlingen]

Benutzer-Werkzeuge

Webseiten-Werkzeuge


robotik:lektion1:09_methodenaufrufe

9 Methodenaufrufe

Auf einer vorhergehenden Seite hast du bereits Beispiele für den Aufruf von Methoden zur Ausgabe von Daten in unseren Konsolenprogrammen gesehen. Im folgenden sollen diese Aufrufe näher erläutert werden. Dabei stellt sich insbesondere die Frage, welche Methoden (Befehle) überhaupt zur Verfügung stehen. Dazu gehen wir von folgendem Auszug aus dem Hauptprogramm des Beispiels aus:

// Hier kommen die Programmbefehle des Hauptprogramms:
konsole.schreibeZeile("Hallo, hier bin ich."); // Textausgabe
// ...
konsole.schreibeZeile(7+8);
// ...

Wir beginnen mit der Programmzeile zur Textausgabe. Zunächst wird der Name des Objekts genannt, das den Befehl empfangen soll. Hinter dem Objektnamen (hier konsole) steht ein Punkt, gefolgt von dem Namen der Methode, die ausgeführt werden soll (hier schreibeZeile). Hinter dem Methodenname folgt in runden Klammern eine durch Kommata getrennte Liste aller Zusatzdaten, die der Befehl für seine Arbeit benötigt. In unserem Falle besteht diese Liste nur aus einem einzigen Element, nämlich aus dem Text, der ausgegeben werden soll (hier: “Hallo, hier bin ich.”). Der Compiler erkennt an den Anführungszeichen, dass es sich um einen Text handelt. Hinter der rechten runden Klammer folgt ein Semikolon zum Abschluss der Programmzeile.

Man nennt solch eine Zusatzinformation, die an einen Methodenaufruf übergeben wird, auch einen Parameter. Später wirst du Programmbefehle kennenlernen, denen tatsächlich eine ganze Liste von Parametern übergeben wird. Der Methodenaufruf sieht dann im Prinzip so aus:

objektname.methodenname(parameter1, parameter2, ... , letzterParameter);

Umgekehrt gibt es auch Befehle, die gar keine Zusatzinformationen benötigen. In diesem Fall darf man die runden Klammern allerdings nicht weglassen, denn an den Klammern erkennt der Compiler, dass es sich überhaupt um einen Methodenaufruf handelt. Der Methodenaufruf sieht dann im Prinzip so aus:

objektname.methodenname();

Kommen wir zur nächsten angegebenen Programmzeile. Von der Struktur ähnelt diese Zeile der Programmzeile mit der Textausgabe, nur steht dieses Mal die Zusatzinformation innerhalb der runden Klammer (hier: 7+8) nicht in Anführungszeichen. Der Compiler versteht diesen Parameter deshalb nicht als Text sondern als eine Zahl. Bei der Programmausführung wird zunächst der Term 7+8 ausgewertet und das Ergebnis 15 an die Methode schreibeZeile als Parameter übergeben.

Tatsächlich haben wir es hier mit zwei unterschiedlichen Versionen der Methode schreibeZeile zu tun. Während bei Übergabe eines Text-Parameters der Text unverändert im Konsolenfenster angezeigt werden kann, muss das Programm bei Übergabe eines Zahl-Parameters die Zahl, z.B. 15, zunächst in den entsprechenden Text (d.h. hier “15”) umwandeln, und dieser Text wird im Konsolenfenster gezeigt. Der Compiler erkennt am Datentyp des übergebenen Parameters, welche Version des Befehls schreibeZeile aufgerufen werden muss.

Dass verschiedene Versionen dieser Methode existieren, wird auch deutlich, wenn man sich die Dokumentation aller Methoden anschaut, die man an dem Objekt konsole aufrufen kann. Du hast bereits gehört, dass es vom Datentyp (d.h. von der Klasse) des Objektes abhängt, welche Methoden zur Verfügung stehen. Du erinnerst dich, dass das Objekt konsole den Datentyp XKonsole besitzt. Man muss sich also die Dokumentation der Klasse XKonsole anschauen. Du öffnest diese Dokumentation aus dem Projektfenster von BlueJ, indem du den Menübefehl Hilfe → Doku Konsolenanwendungen aufrufst. In dem sich öffnenden Browserfenster klickst du auf den Link für die Klasse XKonsole. Wenn du jetzt etwas nach unten scrollst, findest du eine Zusammenstellung aller verfügbaren Methoden (Abschnitt Method Summary):

Dokumentation zur Klasse XKonsole

In der Methodenzusammenstellung findest du sogar drei verschiedene Versionen der Methode schreibeZeile. Anstatt eines Textparameters (Datentyp java.lang.String) oder einer ganzen Zahl (Datentyp int) kann man auch eine Fließkommazahl (Datentyp float) übergeben. In der Dokumentation wird übrigens zu jedem Parameter neben dem Datentyp auch ein Name für den Parameter angezeigt. Der Name des Parameters ist so gewählt, dass man sich daraus möglichst die Bedeutung des Parameters erschließen kann. Nähere Informationen zu jeder einzelnen Methode mit ihren unterschiedlichen Versionen erhältst du, indem du auf den entsprechenden Methodennamen klickst. Ggf. wird die Bedeutung jedes Parameters nochmals genauer erklärt.

Vielleicht hast du bemerkt, dass vor jeder Methode in der Methodenliste noch ein Datentyp steht, z.B. int leseGanzzahl() oder void schreibeZeile(java.lang.String text). Was dieser Datentyp bedeutet und wofür insbesondere das Wort void steht, wird auf der nächsten Seite erläutert.

Aufgabe

Ergänze in dem vorherigen Beispielprogramm Ausgabe folgende Programmzeile zur Ausgabe einer Fließkommazahl:

konsole.schreibeZeile(1.23456789f);

Teste das Programm und finde in der nachfolgenden Liste das richtige Ausgabeformat der Fließkommazahl im Konsolenfenster:

  • 1.23456789f
  • 1,23456789
  • 1.2345679
  • 1.23456789f
  • 1,23456789
  • 1.2345679


Die Genauigkeit der Zahlen vom Datentyp float ist auf einige Stellen begrenzt, so dass die Zahlenwerte im Programmablauf ggf. gerundet werden müssen.

robotik/lektion1/09_methodenaufrufe.txt · Zuletzt geändert: 2016/09/22 17:48 von gollnik