Martin Häcker/Java Kurs/Tag 1
Inhaltsverzeichnis
LE 1: Hello, World!
Organisatorisches
- Was Passiert
- Wann passiert was
- Wie passierts
- Vorstellung
- Was ist das genau
- Wer sind wir: Freiwillig, Umsonst
- Ziel des Kurses
- Was sie am Ende können sollen
- Gruppeneinteilung
- am Ende der ersten Vorlesung
- Vorher per e-mail
Jemand vom Rechnerbetrieb soll bitte da sein, damit wir Login-Probleme lösen können
Inhalt (Vorgehen, Beispiele, Ideen)
Methodik
Was ist Programmieren?
- imperativ (prozedural) vs. funktionales Programmieren
- relation problem <-> lösung / kochrezept
- Zustandsmaschine
- Einführung nach SICP Kapitel 1 (bis "Programming in Lisp")
- Damit ist die Philosophie von Programmieren gemeint
Drei Dinge, die wichtig sind für Programmierer:
- Primitive Ausdrücke
- Kombinationsmöglichkeiten
- Abstraktionsmöglichkeiten
Java
Wie fangen wir Java an
- Werte und operatoren +,*,/,-, % (?)
- Wenige Variablentypen int, String, (double)
- Zuweisung
- <, >, ==, <=, >=
- if
- Methoden vorgeben: Input, Output
- Was passiert da, wieso erst Compilieren, dann ausführen
Alter Plan
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
- Klammer vergessen
- Semikolon vergessen
- Klasse heißt anders als Datei
- Compiler falsch aufgerufen
Ü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
- Typen
- boolean
- was wir im ersten Teil weggelassen haben?
- Methoden:
- Namend
- Aufruf
- Parameter und Rückgabe -> Call by Value
- main
- return
- Nachtrag Datenstrukturen: void
- Beispiel: System.out.println()
- Blöcke
- if-else
- Formulieren von Bedingungen für if, while
- while
- Schleife als zweite Lösung für duplikation von Code
- Diskussion Schleife <-> Rekursion???
- Weitere Schleifenkonstrukte später - gar nicht?
- for
- continue
- break
- if-else
- 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)
- assert-Methode selber schreiben -> Später!
Übungsaufgaben
- Methoden definieren, die bestimmte Eigenschaften haben
- Beispiele dann Abtippen und ausprobieren
- Sie sollen Nachfragen, wenn sie was anderes hatten (oder sowas)