1.16k likes | 1.32k Views
Grundlagen der Informatik I Thema 11: Von Scheme zu Java. Prof. Dr. Max Mühlhäuser Dr. Guido Rößling. Inhaltsübersicht. Allgemeine Unterschiede zwischen Scheme und Java Übersetzung von Java-Programmen (Kurzfassung) Variablen in Java Primitive Datentypen
E N D
Grundlagen der Informatik IThema 11: Von Scheme zu Java Prof. Dr. Max Mühlhäuser Dr. Guido Rößling
Inhaltsübersicht • Allgemeine Unterschiede zwischen Scheme und Java • Übersetzung von Java-Programmen (Kurzfassung) • Variablen in Java • Primitive Datentypen • Operatoren für Arithmetik, Logik und Bitoperationen • Funktionen in Java • Strings in Java • Kontrollflusssteuerung in Java • Fallunterscheidungen, Schleifen, Rekursion • Listen (Scheme) vs. Felder (Java) • Kommentierung von Java-Elementen • Einführung in die Eclipse Entwicklungsumgebung
Von Scheme zu Java • Mit diesem Foliensatz werden Ihnen einige der wesentlichen Elemente von Java präsentiert • „Fortgeschrittene“ Themen kommen später • Objektorientierung, Vererbung, abstrakte Klassen, Interfaces • Schrittweise Verfeinerung • Java Interpreter, Compiler, Virtuelle Maschine, Laufzeitumgebung • Das Ziel dieses Foliensatzes ist es, Java anhand der Parallelen zu Scheme vorzustellen
Allgemeine Unterschiede • Scheme und Java folgen zwei unterschiedlichen Programmierstilen („Paradigmen“) • Scheme ist eine funktionale Programmiersprache • Im Zentrum stehen Funktionen und die Anwendung von Funktionen • Problemlösung anhand von Dekomposition und Komposition • “Um das Problem X zu lösen, zerlege es in die kleineren Probleme Y und Z. Definiere, wie die kleinsten (atomaren) Probleme zu lösen sind und wie Y und Z zu X zusammengesetzt werden müssen.“ • Weiter von der Maschinen-Ebene entfernt • Erzeugt häufig eine gute modulare Struktur im Code • Zerteile den Code in der Art, wie das Problem zerlegt wird
Abstand vom Rechner im funktionalen Stil • (define (fold f n) • (lambda (x) • (if (empty? x) • n • (f (first x) ((fold f n) (rest x)))))) • (definesumlist (fold + 0)) • (definemultlist (fold * 1)) • (sumlist ‘(3 4 5)) • 12 (multlist ‘(3 4 5)) 60 Erwähnt noch nicht einmal die Liste! Abstraktion von den Details der Ausführung
Allgemeine Unterschiede • Java ist eine objektorientierteSprache • Objekte sollen reale „Dinge“ oder Sachverhalte nachbilden • Details dazu folgen ab T12 • Größere Probleme werden durch Delegation von Aufgaben an andere Objekte gelöst • Die zugrundeliegende Notation ist imperativ: Denken in Rechenschritten • “Um das Problem X zu lösen, führe die folgende Reihenfolge von Rechenschritten aus…” • Nah am Rechner orientiert • Es wird nur eine Nachricht mit einer Dienstanweisung auf einmal geschickt • Wenn mehrere Objekte vorhanden sind, können sie Botschaften aneinander senden • Teilaufgaben an bekannte Objekte delegieren
Ein paar Worte zur Java-Lexikalik • SpezielleSymbole: { } ; . ( ) • { } begrenzen Programmblöcke: • die Definition eines Objekttyps (Klassenrumpf), • die Definition einer Methode (Methodenrumpf) • Sequenzen von Anweisungen, z.B. in den Abzweigungen einer Konditionalanweisung • … • Ausdrücke und Anweisungen inklusive Operationsaufrufe (Dienstanweisungen) werden innerhalb eines Blocks mit “;“ getrennt • . trennt den Empfänger vom Operationsnamen • ( ) begrenzen die Liste der Parameter einer Operation / eines Operationsaufrufs (incc2 5) c2.inc(5);
Ein paar Worte zur Java-Lexikalik • Name (Identifier): c2, Counter, inc, dec • In Namen dürfen nur bestimmte Sonderzeichen wie „_“, „$“ auftreten, aber beispielsweise kein „-“ • Schlüsselwörter: new, void, … • Werden benutzt, um die primitiven Anweisungen eines Programms zu strukturieren. • Nicht als Name erlaubt • Groß-/Kleinschreibung wird unterschieden! • Void wird als ein Name und nicht als Schlüsselwort interpretiert
Inhaltsübersicht • Allgemeine Unterschiede zwischen Scheme und Java • Übersetzung von Java-Programmen (Kurzfassung) • Variablen in Java • Primitive Datentypen • Operatoren für Arithmetik, Logik und Bitoperationen • Funktionen in Java • Strings in Java • Kontrollflusssteuerung in Java • Fallunterscheidungen, Schleifen, Rekursion • Listen (Scheme) vs. Felder (Java) • Kommentierung von Java-Elementen • Einführung in die Eclipse Entwicklungsumgebung
Struktur eines Java-Programms • Ein Java-Programm kann aus beliebig vielen Klassen bestehen, von denen mindestens eine die main-Operation besitzen muss (Hauptprogrammklasse). • Aufgaben von main: • Objekterzeugung der Aufbau einer anfangs minimalen Welt • Siehe Foliensatz T12 • Aufruf der ersten Operation • Sollte in der Regel keinen weitergehenden Kontrollfluss des Java-Programms enthalten • Der Kontrollfluss wird innerhalb der Objektoperationen realisiert • Nicht vergessen! Berechnung als Kooperation von vielen Objekten, wobei jedes Objekt nur eine kleine Teilaufgabe erledigt! • Wird durch Java-Interpreter gestartet und ausgeführt
Wie alles anfängt… • Die „ausgezeichnete“ Methode namens main wird aufgerufen, wenn ein Java-Programm ausgeführt wird… • Dazu muss main in einer Klasse (Schlüsselwort class) stehen • Mehr dazu folgt in T12 publicclassCounterTest { // ... publicstaticvoidmain(String[] args) { CounterConsumer cc = newCounterConsumer(); cc.doSomethingWithCounters(); } // ... } CounterTest.java Java- Compiler javac CounterTest.java java CounterTest Java- Bytecode-Interpreter
Java-Übersetzung • Java-Compiler • Eingabe: Java-Quelltextdatei, Datei.java, die eine oder mehrere Klassendefinitionen enthält • Eine derartige Datei nennt man eine Übersetzungseinheit • Ausgabe: pro Klasse Bsp wird genau eine Datei Bsp.class erzeugt, die das Bytecode-Format der Klasse enthält Bsp1.class Datei.java class Bsp1 {...} class Bsp2 {...} class Bsp3 {...} Bsp2.class Java Compiler Bsp3.class
Berechnungen durchführen • Die Aufgabe wird in Dienstanweisungen zerlegt • Formuliert als Nachrichten (Operationsaufrufe) an Objekte • Jede Nachricht enthält: • Name des Empfängerobjektes: c2 im Beispiel • Namen des Dienstes (der Operation), der (die) vom Empfänger ausgeführt werden soll • inc(), dec(), ... • Die Operation muss in der Schnittstelle des Empfängers enthalten sein • Es wird nur eine Nachricht mit einer Dienstanweisung auf einmal geschickt • Wenn mehrere Objekte vorhanden sind, können sie Botschaften aneinander senden • Teilaufgaben an bekannte Objekte delegieren
Hilfssystem: ACM JTF Bibliothek • Wir nutzen eine Hilfsbibliothek zur Programmierung • Diese erlaubt es uns, … • Programme mit grafischer Oberfläche zu bauen – ab sofort; • Nutzerinteraktion (Werteingaben, …) auch grafisch zu tätigen; • Viele Beispiele zu nutzen (siehe Webseite); • Den Programmstart mittels „main“ zu vereinfachen • Die Bibliothek ist die „ACM JTF“ Bibliothek • ACM: Associationfor Computing Machinery, die größte Dachorganisation für Informatiker und verwandte Berufe weltweit • Siehe www.acm.org; ein Beitritt (19$ pro Jahr!) lohnt sich! • JTF: Java Task Force; 10 erfahrene Informatik-Dozenten • ACM JTF: Die von der JTF der ACM entwickelte Bibliothek • Verlinkt als „acm.jar“ auf der Webseite (etwa 400 kB)
Genereller Aufbau bei Nutzung von ACM JTF • Ihr Programm erbt (T12) von einer dieser Klassen: • acm.program.ConsoleProgram– für eine Eingabekonsole a la DOS • acm.program.DialogProgram – für dialogbasierte Ein-/Ausgabe • acm.program.GraphicsProgram – für grafikbasierte Ausgabe • In der main-Methode erfolgen nur zwei Operationen: • Erzeugen eines neuen Objekts (T12) mit „newMyProgram()“ • Aufrufen der Methode start(String[] args) • Damit wird das Aufgabefenster angelegt etc. • Dann wird die von Ihnen zu schreibende Methode run() aufgerufen • Diese Methode sollte dann alle weiteren Aktionen veranlassen
Interessante Methoden in ConsoleProgram • voidprint(X value) • Gibt Wert value aus; X steht dabei für einen beliebigen Typ • voidprintln(X value) • Gibt Wert value aus und fügt einen Zeilenvorschub an • voidprintln() • Gibt einen Zeilenvorschub aus • voidclear() • Löscht das Konsolenfenster • voidshowErrorMessage(String message) • Zeigt eine Fehlermeldung (in rot) an • String readLine(String p) / intreadInt(String p) / double readDouble(String p) • Zeigt den Text p an und liest eine Textzeile / int / double ein
Beispielprogramm: Hello World - Console importacm.program.ConsoleProgram; // Binde "ConsoleProgram" ein public class HelloConsole extends ConsoleProgram { publicvoidrun() { println("hello, world"); } /* Standard Java entrypoint */ /* This method can be eliminated in most Java environments */ public static void main(String[] args) { newHelloConsole().start(); // startet Console, ruft "run" auf } } Ausgabefenster:
Interaktivität mit DialogProgram • Die Methoden sind identisch zu ConsoleProgram • Für Ein- und Ausgabe werden nun aber Dialoge genutzt • Pro Ausgabe oder Eingabe erscheint ein entsprechendes Fenster • Starten Sie dazu das Programm „Add2Dialog“
Beispielprogramm: Hello World - Dialog importacm.program.DialogProgram; // Binde "DialogProgram" ein public class HelloDialog extends DialogProgram { publicvoidrun() { println("hello, world"); } /* Standard Java entrypoint */ /* This method can be eliminated in most Java environments */ public static void main(String[] args) { newHelloDialog().start(); // startet Dialog, ruft "run" auf } } Ausgabefenster:
Beispielprogramm: Hello World - Grafik importacm.graphics.GLabel; // Binde GLabel (anzeigbarer Text) ein importacm.program.GraphicsProgram; // Binde "GraphicsProgram" ein public class HelloGraphics extends GraphicsProgram { publicvoidrun() { GLabel label = new GLabel("hello, world"); // neuer Text label.setFont("SansSerif-100"); // Font: ohne Serifen double x = (getWidth() - label.getWidth()) / 2; // mittig double y = (getHeight() + label.getAscent()) / 2; // mittig add(label, x, y); // Text hinzufügen } /* Standard Java entrypoint */ /* This method can be eliminated in most Java environments */ public static void main(String[] args) { newHelloGraphics().start(); //startet Graphics,ruft "run" auf } } Ausgabefenster (verkleinert):
Inhaltsübersicht • Allgemeine Unterschiede zwischen Scheme und Java • Übersetzung von Java-Programmen (Kurzfassung) • Variablen in Java • Primitive Datentypen • Operatoren für Arithmetik, Logik und Bitoperationen • Funktionen in Java • Strings in Java • Kontrollflusssteuerung in Java • Fallunterscheidungen, Schleifen, Rekursion • Listen (Scheme) vs. Felder (Java) • Kommentierung von Java-Elementen • Einführung in die Eclipse Entwicklungsumgebung
Variablen in Java • Daten werden Java in der Regel in Variablen gespeichert • Insbesondere zur Zuweisung des Ergebnisses von Rechenschritten • Von Scheme kennen Sie Variablen als gebundene Namen: • In Java erfolgen Zuweisungen mittels "=": ;; provide initial value for counter (define counter-value 0) ;;increment the counter(set! counter-value (succ counter-value)) // provide initial value for counter counterValue = 0; // increment the countercounterValue = counterValue + 1;
Erste Analyse der Unterschiede • Kommentare mit „//“ statt „;“ • Der Variablendeklaration wird ein Typ vorangestellt (int) • Variablennamen ohne „-“, dafür Großschreibung im Wort • „(set! Variable Ausdruck)“ wird zu „Variable = Ausdruck“ • Statt Klammerung enden Anweisungen mit „;“ • Statt Präfixnotation (operator param1 … paramn) wird Infixnotation genutzt • Aus (+ 1 2 3 4 5) wird also 1 + 2 + 3 + 4 + 5 //provide initial value for counter int counterValue= 0; // increment the countercounterValue = counterValue + 1; ;; provide initial value for counter (define counter-value 0) ;;increment the counter(set! counter-value (+ counter-value 1))
Arithmetische Operationen • Java unterstützt alle wesentlichen arithmetischen Operationen • Beachten Sie, dass die Infixnotation genutzt wird! • Im Folgenden sei a eine int-Variable (Ganzzahl) mit Wert 15 • Die Tabelle ist nicht vollständig, mehr in einigen Folien
Variablentyp Jede Variable hat einen Typ, der festlegt… • welche Art von Daten in der Variablen gespeichert werden können. • wie viele Speicherzellen benötigt werden. • int 4 Zellen • long 8 Zellen • … • welche Operationen auf dem (durch diese Variable bezeichneten) Objekt aufgerufen werden können. • Der Typ wird der Variablen bei Deklaration vorangestellt: intcounter;
Deklarationen in Java • Führen neue Namen ein, oft zusammen mit einem Wert • (define …) in Scheme • In Java assoziieren Deklarationen auch einen Typ mit dem Namen: • Der Typ legt fest, wie die Namen im Programm benutzt werden dürfen statisch typisierte Sprachen(später mehr)
counter darf nur ganz-zahligeWerte annehmen intcounter; counter = 10; counter = "hello"; Nur für ganze Zahlen definierte Operationen dürfen verwendet werden. counter counter++; counter.move(); 4 Speicherzellen Variablentyp
size Auswertungsreihenfolge delta Variablen: Zuweisung & Ausdrücke Ausdruck size = size + delta; 3 4 1 =+ 2 Kontrollfluss • Die linke Seite der Zuweisung muss einen Speicherplatz bezeichnen (in Scheme: ein Name in der Umgebung). • Die rechte Seite muss ein Ausdrucksein. • Ein Ausdruck muss einen Wert ergeben.
Inhaltsübersicht • Allgemeine Unterschiede zwischen Scheme und Java • Übersetzung von Java-Programmen (Kurzfassung) • Variablen in Java • Primitive Datentypen • Operatoren für Arithmetik, Logik und Bitoperationen • Funktionen in Java • Strings in Java • Kontrollflusssteuerung in Java • Fallunterscheidungen, Schleifen, Rekursion • Listen (Scheme) vs. Felder (Java) • Kommentierung von Java-Elementen • Einführung in die Eclipse Entwicklungsumgebung
Primitive Datentypen • Java bietet mehrere primitive Datentypen: • Wahr/Falsch Werte: booleanmit Werten true, false • Ganze Zahlen: byte, short, int, long, z.B. 3 • Fließkommazahlen: float, double, z.B. 0.84 • Buchstaben: char, z.B. 'A' • Kein primitiver Datentyp, aber bereits vordefiniert: • Zeichenketten: String, z.B. "Hello World"
Primitive Datentypen • Warum gibt es mehrere Typen für den gleichen Zweck? • Was ist der Unterschied zwischen short und int? • Verschiedene Typen mit unterschiedlichen Wertebereichen • Je größer der Bereich, desto mehr Speicher wird gebraucht Scheme bewahrt den Nutzer vor diesen maschinenabhängigen Details. einfacher zu nutzen, weniger fehleranfällig, aber höhere Laufzeit.
Zeichen in Java • Java verwendet Unicode für den Datentyp char • Einen 16-Bit-Zeichensatz, in dem fast alle Zeichen aller Sprachen repräsentiert werden können • Umlaute etc. sind als Unicode-Escapesequenz anzugeben • Diese beginnt immer mit \u, gefolgt von vier Hexadezimalziffern • Die wichtigsten Umlaute und ihre Codierung sind: • Konvertierbar durch Kommandozeilenbefehl native2ascii
Inhaltsübersicht • Allgemeine Unterschiede zwischen Scheme und Java • Übersetzung von Java-Programmen (Kurzfassung) • Variablen in Java • Primitive Datentypen • Operatoren für Arithmetik, Logik und Bitoperationen • Funktionen in Java • Kontrollflusssteuerung in Java • Fallunterscheidungen, Schleifen, Rekursion • Listen (Scheme) vs. Felder (Java) • Kommentierung von Java-Elementen • Einführung in die Eclipse Entwicklungsumgebung
Zusammengesetzte Ausdrücke Beispiele double a; inti; char c; boolean b; a = 3.1415 + 42;// a == 45.1415 i= 4 – 9; //i == -5 c = 'T'; // c == 'T' i=i+ 1; // i == -5 + 1 == -4 a =i* 2 + 3; // a == -4 * 2 + 3 == -8 + 3 == -5 a =i* (2 + 3); // a == -4 * (2 + 3) == -4 *5 == -20 b = true; // b == true b =i > 0; // -4 > 0 == false b == false
Boolesche Ausdrücke • Vergleiche: • == für Gleichheit, != für Ungleichheit • Vorsicht: = alleine steht für die Zuweisung • <, <=, >=, > wie üblich, aber in Infixnotation • Logisches Nicht (a): • true wenn afalseist, sonst false • Notation in Java: !a • Notation in Scheme: (not a)
Zusammengesetzte boolesche Ausdrücke • Logische Operatoren ermöglichen die Zusammensetzung von einzelnen booleschen Werten • Aus der Logik bekannte Operatoren: • logisches Und (AB): ergibt nur true, wenn A und B true sind (Java: A && B; Scheme: (and A B)) • logisches Oder (AB): ergibt nur false, wenn A und B falsesind (Java: A || B; Scheme: (or A B)) analog zu and, or in Scheme…
Zusammengesetzte boolesche Ausdrücke Beispiele booleana, b;inti; charc; c = 'A';i = 2; a = false; b = c == 'A'; // b ist jetzt true b = a && b; // b ist jetzt false b = !b; // b ist jetzt true b = i > 0 && 3 / i == 1; // Da i == 2: b == 2 > 0 and 3 /2 // Mit 3/2 == 1 (Ganzzahldivision) // b ist jetzt true
Nicht-strikte Operatoren • Die logischen Operatoren a && b(logisches und) a || b(logisches oder) werten den zweiten Operanden nur aus, wenn wirklich benötigt • Auswertungsabkürzung(nicht-strikte Auswertung) • Beispiel: if (a != 0 && b / a > 1) • Für a == 0 würde b/a einen Fehler erzeugen • Aber false && x ist immer false x wird nicht ausgewertet
Bit-Operationen a & b Bitweises Und a | b Bitweises Oder a ^ b Bitweises Exklusiv-Oder, nicht gleich ~aBitweise Negation a << b Verschiebt a um b Stellen nach links, entspricht Multiplikation mit 2b a >> b Verschiebt a um b Stellen nach rechts, entspricht Division mit 2b a >>> b Verschiebt a um b Stellen nach rechts und behält das Vorzeichen bei Diese Operatoren sind für die Typen byte, short, int, long und char definiert.
Bit-Operationen Beispiele • short i = 5 i = 0000 0000 0000 0101short j = 3 j = 0000 0000 0000 0011 • i & j = 0000 0000 0000 0001 i & j == 1i | j = 0000 0000 0000 0111 i | j == 7i << 1 = 0000 0000 0000 1010 i << 1 == 10i >> 1 = 0000 0000 0000 0010 i >> 1 == 2~i = 1111 1111 1111 1010 ~i == -6 • Warum ist ~i == -6? • Weil short Zahlen mit Vorzeichen [signed], sind, wird beim Umkippen des signifikantestenBits das Vorzeichen von negativ zu positiv. Es gibt fünf Inkrementierungen, bis -1 (nur Einser) erreicht ist.
Ausdruck Ausdruck Ausdruck Ausdruck Zuweisungsoperator • In Java ist die Zuweisungein Operator • Sie ist ein Ausdruck und keine Anweisung • Eine Zuweisung hat einen Rückgabewert, neben ihrem essentiellen "Nebeneffekt", den Wert des linken Operanden zu verändern. a = b = c = 42;
Zusammengesetzter Zuweisungsoperator • Variablenwerte werden sehr oft etwa wie folgt geändert: i = i + STEP; • Die Zielvariable tritt an der ersten Stelle des Ausdrucks auf • Hierfür gibt es eine Kurzschreibweise: i += STEP; • Entsprechende Varianten gibt es für fast alle Operatoren:+=, -=, *=, /=, |=, &=, ^=, %=, <<=, >>=, >>>= • Nützlich, wenn das Ziel komplex ist oder nur einmal ausgewertet werden soll,z.B. a[i++]+=2; // Kein guter Stil! • Bei vielen Programmierern als „Abkürzung“ sehr beliebt
Unäre Operatoren • Haben nur einen Operanden • Negation: !a (Scheme: (not a)) • Minus als Zeichen (nicht als binärer Operator): -a • Inkrement/Dekrement Operatoren • Anders als typische unäre Operatoren haben sie einen Nebeneffekt++a, a++, --a, a-- • Präfix und Postfix Versionen haben unterschiedliche Effekte Beispiele a = 4; a++; // entspricht: a = a + 1; a==5 b = a++; // entspricht: b = a; a = a + 1; a==6, b==5 b =++a; // entspricht: a = a + 1; b = a; a==7, b==7 b = a--; // entspricht: b = a; a = a – 1; a==6, b==7
Operator-Prioritäten • Viele arithmetische Ausdrücke können ohne Klammern geschrieben werden • Die Auswertungsregeln entsprechen denen der Schulmathematik a + b > 27 && b + c < 35 || a < 3 bedeutet ((((a + b) > 27) && ((b + c) < 35)) || (a < 3)) In Scheme: (or (and (> (+ a b) 27) (< (+ b c) 35)) (< a 3))
Operator-Priorität und Assoziativität • Operator-Priorität • In einem Ausdruck mit mehreren Operatoren werden Operatoren mit höherer Priorität vor denen mit niedriger Priorität angewendet. • In Scheme trat dies durch Präfixnotation und Klammerung nicht auf. • Operator Assoziativität: • In einem Ausdruck mit mehr als einem Operator gleicher Priorität ... • Der Operator ganz links wird zuerst angewendet, wenn der Operator eine links-nach-rechtsAssoziativität hat. • Der Operator ganz rechts wird zuerst angewendet, wenn der Operator eine rechts-nach-linksAssoziativität hat • Die Prioritäts- und Assoziativitätsregeln in Java sind im Wesentlichen die „üblichen“, wie man sie aus der Algebra und der Logik kennt. • Die Verwendung von Klammern, um die Prioritätsregeln zu überschreiben, ist ebenfalls aus der Algebra bekannt.
Priorität Operator Priorität und Assoziativität Assoziativität In Scheme wegen Präfix Notation nicht notwendig
Inhaltsübersicht • Allgemeine Unterschiede zwischen Scheme und Java • Übersetzung von Java-Programmen (Kurzfassung) • Variablen in Java • Primitive Datentypen • Operatoren für Arithmetik, Logik und Bitoperationen • Funktionen in Java • Strings in Java • Kontrollflusssteuerung in Java • Fallunterscheidungen, Schleifen, Rekursion • Listen (Scheme) vs. Felder (Java) • Kommentierung von Java-Elementen • Einführung in die Eclipse Entwicklungsumgebung
Aufrufen von Funktionen • In Scheme werden oft Funktionen angewendet • Dazu wurde einfach der Funktionsname, gefolgt von allen Parametern, in Klammern gesetzt • In Java erfolgt der Aufruf durch Angabe des Namens, gefolgt von den Parametern in Klammern (und getrennt mit Komma): • Das Semikolon ist nur nötig, wenn der Befehl hier endet, „average“ also nicht in weitere Rechnungen eingeht • In der Regel wird das Ergebnis eines Funktionsaufrufes einer Variablen zugewiesen oder in weiteren Rechnungen genutzt (average -42 50) ;; ergibt 4 average(-42, 50); // ergibt 4
Definition von Funktionen • In Scheme erledigt definedie Definition von Funktionen: • In Java ist die Notation etwas anders: • Vor dem Namen der Funktion steht der Ergebnistyp (hier: int) • Die Parameter stehen in Klammern, getrennt durch Komma • Vor jedem Parameter steht sein Typ • Auch wenn mehrere Parameter nacheinander den gleichen Typ haben • Geschweifte Klammern begrenzen die Funktion (wie „()“ in Scheme) • Der Ergebniswert ist ein Ausdruck nach „return“ • Methoden ohne Ergebnis haben als Ergebnistyp „void“ (define(average x y) (/ (+ x y) 2)) intaverage(int x,int y){return (x + y) / 2;}
Funktionen in Java ;;inc: number ;;purpose: increases currentVal by 1 (define inc () (begin (set!currentVal (+ currentVal 1)) currentVal)) Formulierung der Effekte (später detaillierter) /** * Increases the current value of counter by 1 */ int inc() { currentVal = currentVal + 1; return currentVal; } Typ der Rückgabe Liste der formalen Parameter (hier: leer) Operationskopf Explizite Anweisung zur Rückgabe von Werten Operationsrumpf (Implementierung)