Martin Häcker/Java Kurs/Tag 1
Version vom 2. März 2006, 22:55 Uhr von 84.191.231.47 (Diskussion) (→LE 2: Standardkonstrukte in Java (Robert und Sven))
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 (Robert und Sven)
Übungs-Aufgaben inklusive Vorgaben und Musterlösung LE2UEB Da wir noch kein tatsächliches Konzept für die VL haben und die Übung noch nicht vollständig gereviewed ist wird morgen keiner von uns zur Besprechung kommen. Evtl. bildet ihr euch ja trotzdem schon eine Meinung zu den Übungsmaterialien.
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 void main { int n = 2, m = 2; System.out.print("ackermann(" + n + ',' + m + ") = " + ackermann(n, m)); System.exit(1); } }//(C) Ulli + Martin
- Testen: wie testet man ob und wie etwas geht? (Java Ausprobieren)
- assert-Methode selber schreiben -> Später!
- Werte ausgeben! -> printf-Debugging
- Variablen haben unterschiedliche Werte während das Program läuft!
Übungsaufgaben
- Methoden definieren, die bestimmte Eigenschaften haben
- Beispiele dann Abtippen und ausprobieren
- Sie sollen Nachfragen, wenn sie was anderes hatten (oder sowas)
- Verschiedene Eingabewerte
- erste Endlosschleife