Martin Häcker/Java Kurs/Tag 1
Version vom 23. Februar 2006, 17:14 Uhr von Buchholz (Diskussion)
Inhaltsverzeichnis
LE 1: Hello, World!
Inhalt (Vorgehen, Beispiele, Ideen)
Methodik
Was ist Programmieren?
- imperativ (prozedural) vs. funktionales Programmieren
- Zustandsmaschine
- Einführung nach SICP Kapitel 1 (bis "Programming in Lisp")
Drei Dinge, die wichtig sind für Programmierer:
- Primitive Ausdrücke
- Kombinationsmöglichkeiten
- Abstraktionsmöglichkeiten
Java
Aufbau eines Java-Programms
- Variablen und Identifier-Namen
- Variablendeklaration - Namen vergeben für Dinge, die man berechnet hat!
- Lokale Namen und wieso: (vielleicht?) [1]
- Literale
- Datenstrukturen und Typen:
- Primitive
- String: einführen mit dem Hinweis, dass bei den Primitiven alles normal sei, während bei String "alles anders" ist. Dann später diesen Unterschied aufgreifen. (String ist ja nun "immutable", trotzdem?)
- Arrays (?)
Ein Beispiel bringen und daran erklären, was primitive Ausdrücke, Kombinationen und Abstraktionsmöglichkeiten sind (evtl. langsam entwickeln):
class Test { static void print(double aNumber) { System.out.println("> " + aNumber); } public static void main(String [] arguments) { print(3 * 4); print(7 + 23 * 8 - 3); // .... } }
- Zuweisung, einfache Operatoren (+, *, <=, %)
- ++ oder += (?)
- Kommentare
- if, else
- javac
Methodik
Fehlermeldungen lesen und verstehen
Übungsaufgaben
- cd üben
- Hello World eintippen (kate, gedit, nano, ..)
- javac / java benutzen
- Ergebnisse sehen
- Fehler einbauen, Fehler finden (laufzeit/compilezeit)
- Einige Expressions angeben und die Teilnehmer sollen feststellen, was die ausgeben/berechnen würden
- Das gleiche dann nochmal mit if/else
- Einen mathematischen Ausdruck in Java übersetzen
LE 2: Standardkonstrukte in Java
Inhalt
Methodik
- Wichtigkeit, dass man Programme in verständliche und sinnvolle Teile unterteilt: Procedures as Black-Box Abstractions
Java
- Methoden:
- Aufruf
- Parameter und Rückgabe
- main
- return
- Nachtrag Datenstrukturen: void
- Beispiel: System.out.println()
- Blöcke
- if-else
- for
- while
- continue
- break
- Formulieren von Bedingungen für if, while
- Anwendung von Schleifen
- Rekursion <-> Schleifen (Beispiel)
- Warum/wann Schleifen?
- als Alternative zu Akkumulator Parametern (Vergleich zu OPAL)
- wenn die Anzahl der Durchläufe nicht konstant ist
- als Luxus - Bsp: for( int i = 0; i < 3; i++ )
- Gute Namen
- Abstrakter Gedanke: Für den Computer ists wurscht wie man das was man meint aufschreibt, wir Menschen dagegen sind von sowaas verwirrt:
class _{static long _ (long __,long ___) { return __==0 ?___+ 1: ___==0?_(__-1,1):_(__ -1,_(__, ___-1)) ; } static {int _=2 ,___ = 2;System.out.print( "a("+_+','+___+ ")="+ _ (_, ___) ) ;System .exit(1);}}//(C) Ulli
Wir können uns aber helfen indem wir das so schreiben:
/** @see: http://de.wikipedia.org/wiki/Ackermann-Funktion */ class AckermannFunctionDemo { static long ackermann(long n, long m) { if (n == 0) { return m + 1; } else if (m == 0) { return ackermann(n - 1, 1) } else { return ackermann(n - 1, ackermann(n, m - 1)); } } static { int n = 2, m = 2; System.out.print("ackermann(" + n + ',' + m + ") = " + ackermann(n, m)); System.exit(1); } }//(C) Ulli
- Testen: wie testet man ob und wie etwas geht? (Java Ausprobieren)
Übungsaufgaben
- Methoden definieren, die bestimmte Eigenschaften haben
- Beispiele dann Abtippen und ausprobieren
- Sie sollen Nachfragen, wenn sie was anderes hatten (oder sowas)