Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik I Thema 11: Von Scheme zu.

Ähnliche Präsentationen


Präsentation zum Thema: "Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik I Thema 11: Von Scheme zu."—  Präsentation transkript:

1 Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik I Thema 11: Von Scheme zu Java Prof. Dr. Max Mühlhäuser Dr. Guido Rößling

2 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 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 2

3 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 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 3

4 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 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 4

5 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Abstand vom Rechner im funktionalen Stil 5 (define (fold f n) (lambda (x) (if (empty? x) n (f (first x) ((fold f n) (rest x)))))) (define sumlist (fold + 0)) (define multlist (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 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Allgemeine Unterschiede Java ist eine objektorientierte Sprache –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 6

7 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Ein paar Worte zur Java-Lexikalik Spezielle Symbole: { } ;. ( ) –{ } 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 7 (inc c2 5) c2.inc(5);

8 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 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 8

9 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 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 Inhaltsübersicht 9

10 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 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 10

11 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 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 11 public class CounterTest { //... public static void main(String[] args) { CounterConsumer cc = new CounterConsumer(); cc.doSomethingWithCounters(); } //... } CounterTest.java Java- Compiler Java- Bytecode- Interpreter javac CounterTest.java java CounterTest

12 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 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 12 Java Compiler Bsp1.class Bsp2.class Bsp3.class class Bsp1 {...} class Bsp2 {...} class Bsp3 {...} Datei.java

13 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 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 13

14 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 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: Association for Computing Machinery, die größte Dachorganisation für Informatiker und verwandte Berufe weltweit Siehe www.acm.org; ein Beitritt (19$ pro Jahr!) lohnt sich!www.acm.org –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) 14

15 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 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 new MyProgram() –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 15

16 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Interessante Methoden in ConsoleProgram void print(X value) –Gibt Wert value aus; X steht dabei für einen beliebigen Typ void println(X value) –Gibt Wert value aus und fügt einen Zeilenvorschub an void println() –Gibt einen Zeilenvorschub aus void clear() –Löscht das Konsolenfenster void showErrorMessage(String message) –Zeigt eine Fehlermeldung (in rot) an String readLine(String p) / int readInt(String p) / double readDouble(String p) –Zeigt den Text p an und liest eine Textzeile / int / double ein 16

17 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Beispielprogramm: Hello World - Console import acm.program.ConsoleProgram; // Binde "ConsoleProgram" ein public class HelloConsole extends ConsoleProgram { public void run() { println("hello, world"); } /* Standard Java entry point */ /* This method can be eliminated in most Java environments */ public static void main(String[] args) { new HelloConsole().start(); // startet Console, ruft "run" auf } } Ausgabefenster: 17

18 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 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 18

19 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Beispielprogramm: Hello World - Dialog import acm.program.DialogProgram; // Binde "DialogProgram" ein public class HelloDialog extends DialogProgram { public void run() { println("hello, world"); } /* Standard Java entry point */ /* This method can be eliminated in most Java environments */ public static void main(String[] args) { new HelloDialog().start(); // startet Dialog, ruft "run" auf } } Ausgabefenster: 19

20 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Beispielprogramm: Hello World - Grafik import acm.graphics.GLabel; // Binde GLabel (anzeigbarer Text) ein import acm.program.GraphicsProgram; // Binde "GraphicsProgram" ein public class HelloGraphics extends GraphicsProgram { public void run() { 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 entry point */ /* This method can be eliminated in most Java environments */ public static void main(String[] args) { new HelloGraphics().start(); //startet Graphics,ruft "run" auf } } Ausgabefenster (verkleinert): 20

21 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 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 Inhaltsübersicht 21

22 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 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 "=": 22 ;; 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 counter counterValue = counterValue + 1;

23 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 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 param 1 … param n ) wird Infixnotation genutzt –Aus (+ 1 2 3 4 5) wird also 1 + 2 + 3 + 4 + 5 23 ;; provide initial value for counter (define counter-value 0) ;; increment the counter (set! counter-value (+ counter-value 1)) // provide initial value for counter int counterValue = 0; // increment the counter counterValue = counterValue + 1;

24 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 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 24 OperationIn JavaBeispielErgebnis Addition+2 + 3 + 712 Subtraktion-a – 213 Multiplikation*a * 460 Division/a / 53 Divisionsrest%a % 43 (da 15=3*4+3) Negation--a-15

25 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 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: int counter; 25

26 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 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) 26

27 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Variablentyp 27 counter darf nur ganz- zahlige Werte annehmen counter = 10; counter = "hello"; Nur für ganze Zahlen definierte Operationen dürfen verwendet werden. counter++; counter.move(); int counter; 4 Speicherzellen counter

28 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Variablen: Zuweisung & Ausdrücke 28 1 size = size + delta; Ausdruck Die linke Seite der Zuweisung muss einen Speicherplatz bezeichnen (in Scheme: ein Name in der Umgebung). Die rechte Seite muss ein Ausdruck sein. Ein Ausdruck muss einen Wert ergeben. 2 3 4 delta size =+=+ Kontrollfluss Auswertungsreihenfolge

29 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 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 Inhaltsübersicht 29

30 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Primitive Datentypen Java bietet mehrere primitive Datentypen: –Wahr/Falsch Werte: boolean mit 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" 30

31 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 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 TypMinimalwertMaximalwertSpeicherplatz byte -1281271 Byte (8 Bit) short -32 76832 7672 Bytes (16 Bit) int -2 147 483 6482 147 483 6474 Bytes (32 Bit) long -2 63 2 63 -18 Bytes (64 Bit) float 1,402·10 -45 3,402·10 38 4 Bytes (32 Bit) double 4,94·10 -324 1,797·10 308 8 Bytes (64 Bit) booleanfalsetrue 1 Bit 31 Scheme bewahrt den Nutzer vor diesen maschinenabhängigen Details. einfacher zu nutzen, weniger fehleranfällig, aber höhere Laufzeit.

32 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 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 32 charCodecharCodecharCodecharCode Ä\u00C4ä\u00E4Á\u00C1á\u00E1 À\u00C0à\u00E0Ç\u00C7ç\u00E7 É\u00C9é\u00E9È\u00C8è\u00E8 Ö\u00D6ö\u00F6Ó\u00D3ó\u00F3 Ü\u00DCü\u00FCÚ\u00DAú\u00FA Ù\u00D9ù\u00F9Â\u00C2ß\u00DF

33 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 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 Inhaltsübersicht 33

34 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Zusammengesetzte Ausdrücke Beispiele 34 double a; int i; 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 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 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 a false ist, sonst false –Notation in Java: !a –Notation in Scheme: (not a) 35 a!a falsetrue false

36 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 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 false sind (Java: A || B ; Scheme: (or A B) ) 36 ABA && BA || B false truefalsetrue false true analog zu and, or in Scheme…

37 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Zusammengesetzte boolesche Ausdrücke 37 Beispiele boolean a, b; int i; char c; 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 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 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 38

39 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Bit-Operationen a & b Bitweises Und a | b Bitweises Oder a ^ b Bitweises Exklusiv-Oder, nicht gleich ~a Bitweise Negation a << b Verschiebt a um b Stellen nach links, entspricht Multiplikation mit 2 b a >> b Verschiebt a um b Stellen nach rechts, entspricht Division mit 2 b 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. 39

40 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Bit-Operationen short i = 5 i = 0000 0000 0000 0101 short j = 3 j = 0000 0000 0000 0011 i & j = 0000 0000 0000 0001 i & j == 1 i | j = 0000 0000 0000 0111 i | j == 7 i > 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 signifikantesten Bits das Vorzeichen von negativ zu positiv. Es gibt fünf Inkrementierungen, bis -1 (nur Einser) erreicht ist. 40 Beispiele

41 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Zuweisungsoperator In Java ist die Zuweisung ein 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. 41 a = b = c = 42; Ausdruck

42 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 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 42

43 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 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 43 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 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Operator-Prioritäten Viele arithmetische Ausdrücke können ohne Klammern geschrieben werden –Die Auswertungsregeln entsprechen denen der Schulmathematik 44 a + b > 27 && b + c < 35 || a < 3 ((((a + b) > 27) && ((b + c) < 35)) || (a < 3)) bedeutet (or (and (> (+ a b) 27) (< (+ b c) 35)) (< a 3)) In Scheme:

45 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 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-rechts Assoziativität hat. Der Operator ganz rechts wird zuerst angewendet, wenn der Operator eine rechts-nach-links Assoziativitä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. 45

46 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Operator Priorität und Assoziativität 46 Unäre Operatoren++, --, -, ~, !rechts Multiplikation / Division / Rest*, /, %links Addition/ Subtraktion+, -links Shift >links Vergleich, =links Gleichheit==, !=links bitweises und&links bitweises xor^links bitweises oder|links logisches und&&links logisches oder||links Bedingungsoperator? :rechts Zuweisung=, +=, -=, *=, …rechts Priorität Assoziativität In Scheme wegen Präfix Notation nicht notwendig

47 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 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 Inhaltsübersicht 47

48 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 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 48 (average -42 50) ;; ergibt 4 average(-42, 50); // ergibt 4

49 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Definition von Funktionen In Scheme erledigt define die 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 49 (define (average x y) (/ (+ x y) 2)) int average(int x, int y) { return (x + y) / 2; }

50 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 50 Funktionen in Java Operationskopf Operationsrumpf (Implementierung) Explizite Anweisung zur Rückgabe von Werten /** * Increases the current value of counter by 1 */ int inc() { currentVal = currentVal + 1; return currentVal; } Liste der formalen Parameter (hier: leer) Formulierung der Effekte (später detaillierter) ;;inc: number ;;purpose: increases currentVal by 1 (define inc () (begin (set! currentVal (+ currentVal 1)) currentVal)) Typ der Rückgabe

51 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 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 Inhaltsübersicht 51

52 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Strings in Java Auch wenn sie zunächst so aussehen, sind Strings in Java keine primitiven Datentypen Strings werden erzeugt durch die Nutzung von doppelten Anführungszeichen: "Hello World" erzeugt einen String –Alternativ durch new String("Hello World") Durch die Methode toString() kann jedes Objekt ( T12) in eine String-Repräsentation umgewandelt werden –Wurde diese Methode nicht passend implementiert, entsteht in etwa folgender String: MyClassName@1234567ab –MyClassName steht dabei für den Namen der Klasse –1234567ab steht für den Hash-Code der Klasse Umwandlung primitiver in String: –String.valueOf(x) wobei x den Typ int, boolean, … haben kann 52

53 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Wichtige Methoden der Klasse String Hier ist nur eine Auswahl – bitte lesen Sie die Doku! –char charAt(int index) – liefert das Zeichen an Position index –int compareTo(String o),int compareToIgnoreCase(String o) – vergleicht den aktuellen String mit o: Sind beide gleich, ist das Ergebnis 0 Ist der aktuelle String lexikografisch kleiner, ist das Ergebnis < 0 Ist der aktuelle String lexikografisch größer, ist das Ergebnis > 0 Die erste Variante unterscheidet Groß-/Kleinbuchstaben, die 2. nicht –int indexOf(char c), int indexOf(String o), int indexOf(char c, int s), int indexOf(String o, int s) Liefert die erste Position, an der c bzw. o auftritt, sonst -1 In der zweiten Variante gilt dies erst ab Startposition s –int lastIndexOf(char c), int lastIndexOf(String o), int lastIndexOf(char c, int s), int lastIndexOf(String o, int s) Analog zu indexOf, liefert aber die letzte gefundene Position. 53

54 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Wichtige Methoden der Klasse String int length() –Liefert die Länge des Strings String replace(char oldChar, char newChar) –Ersetzt alle Vorkommen von oldChar durch newChar und gibt einen entsprechenden neuen String zurück. boolean startsWith(String s), boolean endsWith(String s) –Liefert true oder false, je nachdem, ob der aktuelle String mit dem String s anfängt bzw. endet oder nicht. String substring(int startIndex), String substring(int startIndex, int endIndex) –Liefert einen Auszug des aktuellen Strings, der an der Position beginIndex anfängt und bis zum Ende des Strings bzw. in der Variante mit zwei Parametern bis vor endIndex reicht. 54

55 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Wichtige Methoden der Klasse String String toLowerCase(), String toUpperCase() –Diese Methoden erstellen einen neuen String, der dem aktuellen String entspricht, aber bei dem alle Großbuchstaben in Kleinbuchstaben umgewandelt wurden bzw. alle Kleinbuchstaben in Großbuchstaben umgewandelt wurden. Andere Zeichen sind nicht betroffen. String trim() –Liefert einen String, der dem aktuellen String entspricht, nachdem alle führenden und abschließenden "Whitespace"-Zeichen (mit ASCII-Code kleiner als 32, der Codierung des Leerzeichens) entfernt wurden. Daher gilt: –" Hello World! ".trim(); // returns "Hello World!" char[] toCharArray() –Liefert ein char[], bei dem jedes Element genau dem Zeichen an der entsprechenden Position entspricht. 55

56 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Vergleichen von Strings Strings bitte nur über String.equals(String s) vergleichen –Also bitte nicht mit "=="! –Auch wenn es verführerisch ist… –"==" testet in Java, ob zwei Elemente identisch sind, d.h. es sich um das selbe Objekt - nicht nur um ein "gleiches" handelt. –Daher sollte man "==" auf Objekten inklusive String immer nur dann verwenden, wenn man wissen will, ob die beiden Objekte wirklich identisch sind und sich nicht nur gleichen. == funktioniert aber bei mir – manchmal? –Das liegt an einer Optimierung seitens Java, bei der mehrfach auftretende gleiche Strings nur einmal gespeichert werden. –Das gilt aber nicht für dynamisch (zur Laufzeit) erzeugte Strings! Strings sind immutable (unveränderlich) –Das heißt: jeder Änderung legt einen neuen String an (!) 56

57 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 StringBuffer und Zusammenfügen von Strings Insbesondere bei der Ausgabe möchte man gerne Elemente aneinanderhängen: –"Hello, " + givenName + " " + familyName Dafür gibt es den +-Operator für Strings Aber: dieser erzeugt jedesmal (!) einen neuen String Daher ist es besser, mit einem StringBuffer (s. Doku) zu arbeiten Grundschema (Details siehe Dokumentation): –StringBuffer sb = new StringBuffer(256); –sb.append("Hello, ").append(givenName).append(" "); –sb.append(familyName); Umwandlung in einen String: durch toString() Nutzung des StringBuffers ist deutlich effizienter als + 57

58 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 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 Inhaltsübersicht 58

59 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Kontrollstrukturen in Java Kontrollstrukturen beeinflussen die Ausführung von Programmen Zwei grundlegende Typen: –Bedingung: Anweisungen werden nur ausgeführt, wenn eine Bedingung erfüllt ist if - und cond -Spezialformen in Scheme –Schleife: Anweisungen werden mehrfach ausgeführt Die Kontrollstrukturen von Java werden durch folgende Grammatikregel angegeben: 59 = | | | | | |

60 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Bedingungen: if -Anweisung Die Auswertung von Ausdruck muss vom Typ boolean sein Die erste Anweisung wird nur ausgeführt, wenn der Ausdruck als true ausgewertet wird. Andernfalls wird der (optionale) else -Zweig ausgeführt Anweisung kann ein Block sein, also eine Sequenz von Ausdrücken In Java geben if -Anweisungen keinen Wert zurück Der else -Zweig ist optional 60 = if ( ) [else ]

61 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Fallunterscheidungen: if In Scheme besteht if immer aus drei Teilen: –Bedingung –Ausdruck, wenn die Bedingung wahr ist –Ausdruck, wenn die Bedingung falsch ist In Java ist die Notation fast identisch (Fokus auf if!) 61 (define (absolute x) (if (< x 0) (- x) x)) int absolute(int x) { if (x < 0) return –x; else return x; }

62 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Die Ausdruck-Äquivalente von if Anweisung versus Ausdruck In Scheme ist if ein Ausdruck mit Rückgabewert –Dieser Ausdruck liefert entweder 100 oder 200 als Ergebnis Ein Scheme-artiges if gibt es in Java durch das Konstrukt (condition) ? exp1 : exp2 Falls die Bedingung wahr ist, entspricht der Wert des Ausdrucks exp1, sonst ist der Wert exp2 62 x = (num < 0) ? 100 : 200; if (num < 0) x = 100; else x = 200; if (num < 0) x = 100; else x = 200; äquivalent (if (< num 0) 100 200)

63 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Fallunterscheidung 63 Wir wollen ein einfaches Programm zur Farbunterscheidung schreiben Je nach übergebenem Parameter soll ein passender Farbname ausgegeben werden Häufig in Grafikanwendungen benutzt Sogenannte CLUT (Color Look-up Table) (define (color-choice color) (cond [(= color 0) "schwarz"] [(= color 1) "rot"] [(= color 2) "gelb"] [else "Farbe nicht identifizierbar"]) )

64 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 switch - und break -Anweisungen 64 Die switch -Anweisung kann als verallgemeinerte Form der Programmverzweigung aufgefasst werden Mehr oder weniger äquivalent zu cond in Scheme = switch( ) { } =... = case : = default: = |

65 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 switch - und break -Anweisungen 65 public class SwitchAnweisung1 { public static void main(String[] args) { int farbeingabe = 1; switch(farbeingabe) { case 0: System.out.println("schwarz"); case 1: System.out.println("rot"); case 2: System.out.println("gelb"); default: System.out.println( "Farbe nicht identifizierbar"); } Maximal eine default -Alternative! KonstanterAusdruck muss zur Übersetzungszeit berechnet werden können

66 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Vergleich von switch und cond Statt mehreren Bedingungen kann in Java nur ein konstanter Ausdruck genutzt werden Auch die zu prüfenden Werte (case) müssen konstant sein switch passt nur in speziellen Fällen dort, wo man in Scheme ein cond genutzt hätte In der Regel entspricht dem cond von Scheme eine Folge von if -Befehlen Da bei return die Methode verlassen wird, können wir hier auch auf else verzichten 66 (define (absolute x) (cond [(> x 0) x] [(= x 0) 0] [else (- x)])) int absolute(int x) { if (x > 0) return x; else if (x == 0) return 0; else return –x; }

67 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Semantik der switch -Anweisung Auswertung des konstanten Ausdrucks und Durchsuchung der case -Labels nach einem passenden Wert Passendes case -Label gefunden –Ausführung aller folgenden Anweisungen –Beachte: das sind auch die Anweisungen der eventuell folgenden case - und default -Labels Kein passendes case -Label gefunden –Sprung zum (optimal) vorhandenen default -Label –Ausführung aller folgenden Anweisungen: Das könnten auch die Anweisungen der eventuell folgenden case - und default -Labels sein 67

68 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Semantik der switch -Anweisung 68 public class SwitchAnweisung1 { public static void main(String[] args) { int farbeingabe = 1; switch (farbeingabe) { case 0: System.out.println("schwarz"); case 1: System.out.println("rot"); case 2: System.out.println("gelb"); default: System.out.println( "Farbe nicht identifizierbar"); } Aufruf: java SwitchAnweisung1 liefert: rot gelb Farbe nicht identifizierbar Nicht was wir wollten

69 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Semantik der switch -Anweisung 69 public class SwitchAnweisung2 { public static void main(String [] args) { int farbeingabe = 1; switch (farbeingabe) { case 0: System.out.println("schwarz"); break; case 1: System.out.println("rot"); break; case 2: System.out.println("gelb"); break; default: System.out.println( "Farbe nicht identifizierbar"); } Beispiel Aufruf: java SwitchAnweisung2 liefert: rot

70 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Semantik der switch -Anweisung Bemerkungen: –Die break - (oder auch return- ) Anweisung kann verwendet werden, um den switch -Block zu verlassen –Ist kein default -Label vorhanden und keines der case -Labels passt, dann wird der switch -Block übersprungen –Üblicherweise ist break die letzte Anweisung eines case -Labels –Das default -Label sollte das letzte Label sein 70

71 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Rekursive Funktionsaufrufe In Scheme haben wir in der Regel Rekursion verwendet, um eine Operation auf mehreren Daten anzuwenden Das geht in Java natürlich auch: Für viele Anwendungen werden stattdessen Schleifen verwendet Eine Schleife führt (nach bestimmten Kriterien) Befehle wiederholt aus 71 (define (sum-until-n n) (if (<= n 0) 0 (+ n (sum-until-n (- n 1))) ) int sumUntilN(int n) { if (n <= 0) return 0; return n + sumUntilN(n - 1); } Addiere alle Zahlen von 1 bis n"

72 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Schleifen Die einfachste Schleife wiederholt eine Anweisung eine feste Anzahl mal (engl. counting loop) In Java: for -Schleife 72 = for ([ | ]; [ ];[ ]) Ausdruck muss vom Typ boolean sein for (int i = start; i < end; i++) // vorwaerts... for (int i = end; i > start; i-=2) // rueckwaerts, Schrittweite 2 int sumUntilN(int n) { int sum = 0; for (int i = 1; i <= n; i++) sum += i; return sum; } Addiere alle Zahlen von 1 bis n"

73 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Schleifen und Rekursion 73 (define (factorial1 n) (if (= n 1) 1 (* n (factorial1 (- n 1))) ) (define (factorial2 n) (local ( (define (iter product counter) (if (> counter n) product (iter (* counter product) (+ counter 1)))))) (iter 1 1) ) (define (factorial3 n) (local ((define product 1) (define counter 1) (define (iter) (if (> counter n) product (begin (set! product (* counter product)) (set! counter (+ counter 1)) (iter))))) (iter))) Rekursion im Akkumulator-Stil Iteration mit Zuweisungen Natürliche Rekursion

74 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Schleifen und Rekursion 74 class Example { public int factorial1(int n) { if (n == 1) { return 1;} else { return n * factorial1(n-1); } } public int factorial2(int n) { return iter(1, 1, n); } private int iter(int product, int counter, int n) { if (counter > n) { return product; } else { return iter(counter * product, counter + 1, n); } } public int factorial3(int n) { int product=1; for (int counter = 1; counter <= n; counter = counter + 1) { product = counter * product; } return product; } } Natürliche Rekursion Lineare Iteration Iteration mit Zuweisungen

75 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Die while -Schleife Häufig werden Schleifen nicht eine feste Anzahl mal ausgeführt Eine while -Schleife führt eine Anweisung aus, solange die Schleifen-Bedingung wahr ist Ausdruck muss vom Typ boolean sein Vor der ersten und vor jeder weiteren Ausführung der Anweisung wird die Schleifenbedingung geprüft. Sobald die Bedingung als false ausgewertet wird, endet die Schleife. Es ist nicht sicher, dass der Schleifenkörper überhaupt ausgeführt wird. 75 = while ( )

76 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Die while -Schleife: Beispiel 76 Entweder wurde ein Divisor kleiner als number gefunden oder factor wurde erhöht, bis es gleich number wurde. // Zahl ist groeser als 0 boolean isPrime(int number) { int factor = 2; // pruefe alle Faktoren, bis einer die Zahl teilt while (number % factor != 0) { factor = factor + 1; } return number == factor; } Prüfe, ob eine Zahl prim ist"

77 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Wie schreibt man eine while -Schleife? 1.Formuliere den Test, der festlegt, ob die Schleife wieder ausgeführt wird. z.B. ( x - y*y) > 0.005 bedeutet, dass die Präzision noch nicht gut genug ist 2.Formuliere die Aktionen für den Schleifenkörper, der einen Schritt näher an den Abbruch der Schleife führt. z.B. s = s + i; i++, addiere die Werte 3.Meistens braucht man eine Initialisierung vor der Schleife und etwas Nachbearbeitung nach der Schleife. 77

78 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Schleifen: while und for Im Allgemeinen hat eine while -Schleife die Form Das passt genau für die for -Schleife –Die Anwendung mit einer festen Ausführungszahl ist nur ein Spezialfall! 78 ; while ( ) { ; } for ( ; ; )

79 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Die do - while -Schleife Eine do - while -Schleife prüft die Bedingung nach der Ausführung des Schleifenkörpers Der Schleifenkörper wird wenigstens einmal ausgeführt Wenn Ausdruck false ist - die Auswertung findet nach der Ausführung des Schleifenkörpers statt - bricht die Schleife ab 79 = do while ( ) muss vom Typ boolean sein

80 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 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 Inhaltsübersicht 80

81 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Listen in Scheme In Scheme wurde sehr viel rekursiv auf Listen gearbeitet Listen sind rekursiv definiert (first, rest) und eignen sich sehr gut für rekursive Algorithmen Listen sind fest eingebaut, müssen also nicht neu definiert werden –Im Gegensatz etwa zu unseren Bäumen und Graphen Listen haben eine unbegrenzte Länge –Sie wachsen mit, wenn neue Daten eingefügt werden Es gibt spezialisierte Zugriffsfunktionen –first, second, third, … –Sehr einfach zu definieren, falls nicht schon vorhanden Was bietet Java an Vergleichbarem an? 81

82 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Felder / Arrays: Motivation Verwendung vieler Variablen (a1, a2, …) geht nicht –Anzahl der Elemente wäre fest –Mühsame Vergleiche if (a1 < a2) { if (a1 < a3)... –Erzeugt sehr schwer erweiterbaren Code Verwendung von Datenstrukturen mit sequentiellem Zugriff auf die Elemente ist häufig zu ineffizient –Das ist aber genau das, was Scheme mit Listen bietet! 82 Mathe: a 1, a 2, a 3,... Referenz-Typ "Array" Wie kann man schnellen Zugriff auf eine potentiell große Anzahl an Elementen bieten, z.B. um sie zu sortieren?

83 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Arrays Lösung: Array Eine Zusammenfassung mehrerer Elemente des selben Typs, indizierbar durch die Array Variable ::= [] ::= new [ ] Beispiel: // erzeuge ein Array mit 15 Ganzzahlen int[] scores = new int[15]; 83 Ein zusammenhängender Speicherbereich mit Platz für 15 Ganzzahlen wird reserviert. Dies erlaubt effizienten Zugriff.

84 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Arrays Zugriff auf ein bestimmtes Array Element –z.B. a[0], a[1], a[3] In Java hat das erste Array Element den Index 0, das letzte hat immer den Index - 1 –Abfragen der Länge eines Arrays a : a.length ohne Klammern! –Die Nutzung eines illegalen Index verursacht eine Exception ( ArrayIndexOutOfBoundsException ) Laufzeitfehler Der Vorteil von a[0] im Vergleich zu a0 ist die potentielle Verwendung einer Variablen als Index int i = 5; a[i+1] = a[i] + a[i–1]; 84

85 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Initialisierung von Arrays 85 int[] scores = new int[]{ 6, 4, 2, 8, 3 }; String[] predators = new String[] { "lion", "tiger", "shark"}; String[] predators = new String[3]; predators[0] = "lion"; predators[1] = "tiger"; predators[2] = "shark"; Deklariert und definiert automatisch ein Array mit 5 Elementen äquivalent

86 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Referenz-Typ Array Arrays sind Objekte –Werden mit " new " erzeugt (-> mehr in T12…) –Werden durch garbage collection entsorgt Array-Variablen enthalten Referenzen zu Array-Objekten int[] a; int[] b = new int[]{ 3, 1, 4 }; a = b; // a und b greifen jetzt // auf das selbe Array zu! Unterschiede zu anderen Referenz-Typen: –new -Operator benutzt keinen Konstruktor" –Keine Vererbung zwischen Array Typen 86 3 14 ba

87 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Mehrdimensionale Arrays Arrays mit Arrays als Elementen –Deklaration: int[][] table; –Erzeugung: 87 table = new int[3][2]; table = new int[3][]; table[1] = new int[2]; oder 0 0 0 0 0 0 0 0 0 0 Keine Dimension spezifiziert. Vorteil: effiziente Speicherung von nicht-rechteckigen Strukturen dreieckige Matrix –Zugriff: table[1][0] = 42;

88 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Mehrdimensionale Arrays int pascal[][] = new int[][] { { 1 }, { 1, 2, 1}, { 1, 3, 3, 1}, { 1, 4, 6, 4, 1} } 88 pascal[3][1] 1 1 2 1 3 1 3 1 1 4 6 4 1

89 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Mehrdimensionale Arrays table.length // 3 table[0].length // NullPointerException table[1].length // 2 table[1][2] // IndexOutOfBoundsException 89 042 table

90 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Arrays - Darstellung Mehrdimensionale Arrays –nutze Zeilen-Spalten-Folge: auf A[2,4] folgt A[2,5] –nutze Spalten-Zeilen-Folge: auf A[2,4] folgt A[3,4] –Unterschied kann wichtig sein im Hinblick auf Caching 90

91 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Arrays - Darstellung Mehrdimensionale Arrays –Kann in Java auch ein Array von Referenzen zu Arrays sein. Frage: Was sind die Vor- und Nachteile von fortlaufender Belegung und Arrays von Pointern auf Arrays ? –[C/C++ Notation!] 91

92 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 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 Inhaltsübersicht 92

93 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Kommentierung von Java-Elementen Bei Nutzung der korrekten Kommentarnotation kann Java automatisch Dokumentationen in HTML erzeugen Möglich für alle nach außen sichtbaren Elemente: –Klassen –Konstante –Klassen- und Objektattribute –Methoden Grundlegende Notation: vor dem Element steht ein Kommentar folgender Form /** * Kommentartext */ Viel mehr unter http://java.sun.com/j2se/javadoc/index.jsphttp://java.sun.com/j2se/javadoc/index.jsp 93

94 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Sonderformate Es gibt zahlreiche Sonderbefehle –Fangen immer mit @ an Diese gehören in eine eigene Zeile des Kommentars –* am Anfang der Zeile nicht vergessen @param x text –Kommentar text zu Parameter x @return text –Kommentiert, was diese Methode zurückgibt –Natürlich nur sinnvoll, wenn die Methode nicht void ist! @author text –Autorangabe, oft in Form Name 94

95 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Sonderformate II @throws type text –Beschreibt das (mögliche) Auftreten einer Exception ( T18) mit Angabe von Typ und wann / warum das passieren kann @version double –Angabe der Versionsnummer @since text –Angabe, seit wann diese Version existiert –Im JDK oft 1.5: erst seit Java 1.5/5.0 @see Referenz –Querverweis auf andere Elemente –Bei anderer Klasse: @see packagenamen.Klasse#Methode –Methoden mit Parameter: Angabe mit Typ der Parameter Z.B. als m(int, String, double) 95

96 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Beispiel /** * This method will sort the array passed in, thus * changing its elements. * Uses quicksort(array, 0, array.length-1) for sorting. * * @param array the array to be sorted * @throws IllegalArgumentException if the array is null * @author Guido Roessling roessling@acm.orgroessling@acm.org * @version 0.2 * @see #quicksort(array, int, int) */ public void quicksort(int[] array) { /* … */ } 96

97 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 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 Inhaltsübersicht 97

98 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Integrierte Entwicklungsumgebung Eine integrierte Entwicklungsumgebung (integrated development environment, IDE) ist ein Programm zur Unterstützung von Entwicklern bei der Erstellung von Anwendungen Eine IDE besteht normalerweise aus einem Quellcode-Editor, einem Compiler und/oder Interpreter, Werkzeugen zur automatisierten Anwendungserzeugung, und (normalerweise) einem Debugger –Viele moderne IDEs verfügen außerdem über einen Klassen- browser, einen Objektinspektor und ein Klassenhierarchie- diagramm, die in der Erstellung objektorientierter Anwendungen verwendet werden können. Eine IDE ist typischerweise für eine bestimmte Sprache gedacht, wie z. B. die Visual Basic IDE. IDEs, die mehrere Programmiersprachen unterstützen: Eclipse, NetBeans, Microsoft Visual Studio 98

99 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Der Eclipse-Java-Editor Die Fähigkeiten des Eclipse-Editors umfassen auch Codevervollständigung und Syntaxprüfung. Codevervollständigung stellt eine kontextsensitive Liste von Vorschlägen dar, die mit der Tastatur oder Maus ausgewählt werden können: –Eine Liste von Methoden, die zu einem Objekt passen, oder ein zu ergänzendes Codestück, basierend auf Schlüsselwörtern wie for oder while –Kann durch Strg-Leertaste aufgerufen werden Syntaxprüfung hängt von inkrementeller Übersetzung ab –Wenn der Quelltext gespeichert wird, wird er im Hintergrund übersetzt und auf Syntaxfehler überprüft Kein separater Übersetzungsschritt! –Standardmäßig werden Syntaxfehler rot unterstrichen, und ein roter Punkt mit einem weißen "X" erscheint am linken Rand. –Fehler, die durch eine Glühbirne am linken Rand des Editors angezeigt werden, kann der Editor selbst beheben Quick Fix Erreichbar durch Strg-1 99

100 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Der Eclipse-Java-Editor 100 Outline (Übersicht) Probleme (Compile-Fehler, Warnungen) Tabs für Sichten, hier: Probleme Code Editor Package Übersicht

101 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Eclipse: Anzeige von JavaDoc 101

102 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Eclipse: Codevervollständigung 102

103 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Eclipse: Inhaltshilfe 103

104 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Eclipse: Refactoring 104

105 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Debugging mit Eclipse Der JDT-Debugger von Eclipse kann ein Java-Programm Zeile für Zeile ausführen, z. B. um Variablenwerte an bestimmten Punkten zu untersuchen –Eine der mächtigsten Möglichkeiten, um Fehler im Code aufzuspüren –Entspricht der schrittweisen Auswertung in DrScheme Um das Debugging vorzubereiten, wird ein Unterbrechungspunkt (breakpoint) im Code gesetzt –An diesem Punkt unterbricht der Debugger die Ausführung und wechselt zur Debugger-Perspektive –Ein Breakpoint wird durch einen Doppelklick in den grauen Rahmen auf der linken Seite des Editors gesetzt Es erscheint ein blauer Punkt, der den Breakpoint anzeigt Starten Sie das Program mit Debug, nicht mit Run im Menü Run! 105

106 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Ansichten der Debugging-Perspektive 106 Die Debug- Ansicht zeigt den Aufrufstack und die Zustände aller Threads, einschl. der bereits fertig ausgeführten Ansichten zur Modifi- kation von Variablen und Break- points schrittweise durch den Code gehen Editor- Ansicht

107 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Wichtige Tastenkürzel für Eclipse Eclipse bietet sehr viele sehr gute Möglichkeiten zur Unterstützung des Programmierens Hier die wichtigsten allgemeinen Tastenkürzel –Für Windows; auf anderen Betriebssystemen (Mac; im Pool, …) evtl. teilweise anders 107 KürzelEffekt Strg-LeertasteCode vervollständigen Strg-FText suchen / ersetzen Strg-HSpezielle Suche (nach Klassen, in Dateien, …) Strg-JInkrementelle Suche (Weitersuchen) Strg-KZur nächsten Fundstelle springen Strg-Shift-KZur vorherigen Fundstelle springen Strg-F11Programm ausführen F11Programm im Debugger starten

108 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Tastenkürzel Eclipse für Java KürzelEffekt F3Deklaration des Elements unter dem Cursor öffnen F4Klassenhierarchie im View zeigen Alt-Shift-SSource-Menü einblenden Alt-Shift-ZCodeblock umschließen (etwa mit try/catch, s. später) Shift-F2Externe Javadoc-Dokumentation öffnen Strg-/Zeilen auskommentieren Strg-1Quick Fix (automatische Korrektur) Strg-2Abkürzungen für Quick Assist Strg-Alt-HAufrufhierarchie der aktuellen Methode Strg-GDeklaration der Klasse im Workspace suchen Strg-IEinrückungen anpassen Strg-OOutline (Übersicht) einblenden Strg-TKlassenhierarchie einblenden 108

109 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Tastenkürzel Eclipse für Java KürzelEffekt Strg-Shift-FCode automatisch formatieren Strg-Shift-GReferenzen der selektierten Klasse im Workspace suchen Strg-Shift-OImport-Anweisungen automatisch erstellen (-> T15) Strg-Shift-TSchnellsuche für Klassen 109

110 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Code Refactoring KürzelEffekt Alt-Shift-CParameter einer Methode ändern Alt-Shift-IMethode einbetten Alt-Shift-MMethode extrahieren Alt-Shift-RUmbennenen Alt-Shift-TRefactoring-Menü anzeigen Alt-Shift-VVerschieben 110 Beim Refactoring können Methoden einfach umbenannt, Parametertypen geändert werden etc. Normalerweise viel Handarbeit Neben der Methode selbst sind auch alle Methoden anzupassen, die darauf zugreifen Eclipse erledigt das automatisch

111 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Tastenkürzel für den Debugger Auch für den Debugger gibt es hilfreiche Tastenkürzel 111 KürzelEffekt F11Programm im Debugger starten Strg-Shift-BHaltepunkt an aktueller Codezeile setzen Strg-Shift-IVariable inspizieren F5Step into (in Methodenaufrufe etc. hineingehen) F6Step over (über Methodenaufrufe etc. hinweggehen) F7Step return (Methode bis zum return ausführen) F8Ausführung fortsetzen

112 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Zusammenfassung OOP ist ein Programmierparadigma, das Berechnungen als Mengen von Objekten strukturiert, die über Methodenaufrufe kooperieren. Klassen und Objekte in Java ähneln Konstruktorfunktionen und den entsprechenden Objekten in Scheme. –Die Unterschiede sind in erster Linie syntaktischer Natur! –Die Dispatch-Mechanismen sind fest in die Semantik von OO- Sprachen eingebaut (Details dazu folgen später) Java basiert auf VM-Technologie die beste der Compiler- und Interpreter-Technologien Konditionale in Java ähneln denen in Scheme; Kontrollstrukturen werden oft an Stelle von Rekursion eingesetzt. Entwicklungsumgebungen unterstützen den Entwicklungsprozess. 112

113 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 Übungsmöglichkeiten Auf der Webseite finden Sie einige Programmbeispiele –Binden Sie acm.jar in den CLASSPATH ein, wie dort beschrieben Außerdem betreibt der Fachbereich Informatik Webtasks –http://webtasks.informatik.tu-darmstadt.de/webtaskshttp://webtasks.informatik.tu-darmstadt.de/webtasks –Viele Programmieraufgaben, von sehr einfach bis recht schwer Außerdem auch einige Multiple-Choice Tests für höhere Semester –Insbesondere die Aufgaben zu Arrays und Schleifen sind gut zum Üben geeignet – auch für erfahrenere Programmierer –Jede Einreichung wird mit javac übersetzt und mit JUnit getestet –Sie erhalten passendes Feedback, was schief ging und können den Code entsprechend überarbeiten und neu einreichen –Wer eine Aufgabe gelöst hat, hat Zugriff auf alle anderen Lösungen dieser Aufgabe und kann davon lernen bzw. sie kommentieren Nutzung erfolgt mit RBG-Login oder freier Login-Wahl 113

114 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 In beiden Stilen programmieren Programmieren in Java –Fördert den imperativen Stil auf viele Arten Bequemer syntaktischer Zucker für viele imperative Konstrukte, z.B. verschiedene Schleifen für unterschiedliche Zwecke –Funktionen höherer Ordnung fehlen Dies macht es schwieriger, manche interessante Muster der funktionalen Programmierung auszudrücken Können teils durch Objekte simuliert werden Programmieren in Scheme –Scheme unterstützt den funktionalen Stil sehr gut –Der imperative Stil wird auch unterstützt siehe das factorial3 -Beispiel 114

115 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T11 In beiden Stilen programmieren Man kann in Scheme und Java in beiden Stilen programmieren! –Ein guter Programmierer muss in beiden Stilen ein Experte sein. –Ziel #1 dieser Vorlesung: Sie sollen beide Stile können! Objektorientierter Stil ist ein anderes Thema! 115


Herunterladen ppt "Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik I Thema 11: Von Scheme zu."

Ähnliche Präsentationen


Google-Anzeigen