1 / 115

Prof. Dr. Max Mühlhäuser Dr. Guido Rößling

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

avent
Télécharger la présentation

Prof. Dr. Max Mühlhäuser Dr. Guido Rößling

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Grundlagen der Informatik IThema 11: Von Scheme zu Java Prof. Dr. Max Mühlhäuser Dr. Guido Rößling

  2. 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

  3. 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

  4. 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

  5. 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

  6. 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

  7. 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);

  8. 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

  9. 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

  10. 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

  11. 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

  12. 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

  13. 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

  14. 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)

  15. 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

  16. 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

  17. 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:

  18. 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“

  19. 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:

  20. 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):

  21. 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

  22. 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;

  23. 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))

  24. 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

  25. 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;

  26. 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)

  27. 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

  28. 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.

  29. 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

  30. 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"

  31. 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.

  32. 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

  33. 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

  34. 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

  35. 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)

  36. Zusammengesetzte boolesche Ausdrücke • Logische Operatoren ermöglichen die Zusammensetzung von einzelnen booleschen Werten • Aus der Logik bekannte Operatoren: • logisches Und (AB): ergibt nur true, wenn A und B true sind (Java: A && B; Scheme: (and A B)) • logisches Oder (AB): ergibt nur false, wenn A und B falsesind (Java: A || B; Scheme: (or A B)) analog zu and, or in Scheme…

  37. 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

  38. 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

  39. 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.

  40. 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.

  41. 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;

  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

  43. 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

  44. 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))

  45. 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.

  46. Priorität Operator Priorität und Assoziativität Assoziativität In Scheme wegen Präfix Notation nicht notwendig

  47. 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

  48. 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

  49. 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;}

  50. 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)

More Related