Sitzung: Jeden Freitag in der Vorlesungszeit ab 16 Uhr c. t. im MAR 0.005. In der vorlesungsfreien Zeit unregelmäßig (Jemensch da?). Macht mit!

Benutzer:Martin Häcker/Java Kurs: Unterschied zwischen den Versionen

(Sprachkonstrukte die wir Behandeln und deren Reihenfolge)
(Martins Zeitplan: verschiedene java startmöglichkeiten eingefügt + tag eins halbwegs definiert)
Zeile 39: Zeile 39:
 
== Felixs Zeitplan ==
 
== Felixs Zeitplan ==
 
== Martins Zeitplan ==
 
== Martins Zeitplan ==
 +
=== Tag 1 ===
 +
Einführung nach [http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-9.html#%25_chap_1 SICP Kapitel 1] (bis "Programming in Lisp")
 +
 +
Drei Dinge die Wichtig sind für Programmierer:
 +
* Primitive Ausdrücke
 +
* Kombinationsmöglichkeiten
 +
* Abstraktionsmöglichkeiten
 +
 +
Java Stoff:
 +
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);
 +
// ....
 +
}
 +
}
 +
* Variablendeklaration - Namen vergeben für dinge die man berechnet hat!
 +
An dieser Stelle primitive Datentypen und String einführen, mit dem Hinweis das 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?).
 +
* Zuweisung
 +
* if, else
 +
* Return
 +
* System.out.println()
 +
 +
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
 +
 +
Beispiele + Übungen
 +
 +
// TODO: Reicht das, oder brauchts noch mehr?
 +
=== Tag 2 ===
 +
* while, for
 +
* methoden <- Abstraktionsmöglichkeit!!!
 +
* Anwendung davon
 +
 +
=== Tag 3 ===
 +
=== Tag 4 ===
 +
 +
=== Mehrere Möglichkeiten ein Programm anzufangen ===
 +
class Beispiel1 {
 +
static {
 +
// Code hier
 +
}
 +
}
 +
 +
class Beispiel2 {
 +
public static main(String [] arguments) {
 +
// Code hier
 +
}
 +
}
 +
 +
class Beispiel3 {
 +
public static void main(String [] arguments) {
 +
Beispiel3 beispiel = new Beispiel3();
 +
beispiel.run();
 +
}
 +
 +
public void run() {
 +
// Code hier
 +
}
 +
}
  
 
= Vorgehen =
 
= Vorgehen =
Zeile 87: Zeile 183:
 
* try - catch / throws??
 
* try - catch / throws??
 
* ++ oder +=, was noch? Oder gar nichts?
 
* ++ oder +=, was noch? Oder gar nichts?
* NICHT MACHEN: try {} catch (Throwable e) {}
+
* NICHT MACHEN: try {} cach (Throwable e) {}
  
 
=== Was wir nicht machen ABSICHTLICH ===
 
=== Was wir nicht machen ABSICHTLICH ===
* :?, do{}while, ++i, switch,
+
* :?, do{}while, ++i, switch,  
  
 
== Vielleicht haben wir noch Zeit hierfür? ==
 
== Vielleicht haben wir noch Zeit hierfür? ==

Version vom 3. Februar 2006, 20:15 Uhr

Javakurs

  • Räume -> nicht so das problem
  • Beamer / VNC-Multicast?
  • Zedat (FU) hat spezielle Räume für sowas?
  • Anzahl der Leute: eher viel zu viele, ca. 100 Geht

Beteiligte

Wer kennt noch jemanden der Mitmachen würde? Bitte ansprechen - immer Persönlich.

Wir suchen Helfer die:

  • den Teilnehmern bei den Java-Programmen zu helfen (wie geht das mit dem "if-then-else", der "for"-Schleife, wie schreibt man das "try-catch", ...)
  • die 10 Leuten erklären wie man mit mit Java im Detail umgeht und Fragen beantworten
  • die vor 100 Leuten einen Vortrag halten und Java erklären
  • die helfen diese Vorträge inhaltlich Vorzubereiten

Teilnehmer bitte mit e-mail-Adresse eintragen

Tutoren

  • Marcel
  • Martin
  • Arthur
  • Florian
  • Thomas
  • Felix

Rechnerbetreuer

  • Jacob
  • Karl
  • Andreas Janson (vielleicht)

Teilnehmer

  • Max

Durchführung

  • JAVA Grundlagen!
  • "Objekt" ist nicht bäh...

Arthurs Zeitplan

Felixs Zeitplan

Martins Zeitplan

Tag 1

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 Stoff: 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);
		// ....
	}
}
  • Variablendeklaration - Namen vergeben für dinge die man berechnet hat!

An dieser Stelle primitive Datentypen und String einführen, mit dem Hinweis das 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?).

  • Zuweisung
  • if, else
  • Return
  • System.out.println()

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

Beispiele + Übungen

// TODO: Reicht das, oder brauchts noch mehr?

Tag 2

  • while, for
  • methoden <- Abstraktionsmöglichkeit!!!
  • Anwendung davon

Tag 3

Tag 4

Mehrere Möglichkeiten ein Programm anzufangen

class Beispiel1 {
	static {
		// Code hier
	}
}
class Beispiel2 {
	public static main(String [] arguments) {
		// Code hier
	}
}
class Beispiel3 {
	public static void main(String [] arguments) {
		Beispiel3 beispiel = new Beispiel3();
		beispiel.run();
	}

	public void run() {
		// Code hier
	}
}

Vorgehen

  • Kochrezept....
  • Legen immer main -> instanz -> run an, ohne zu verstehen
  • Von Opal ausgehen -> bringt nichts weil Opal nicht verstanden?
  • Von woanders ausgehen? Von null -> normale Welt
  • Von vornherein Objektorientiert -> Langfristig besser? Auch kurzfristig besser?
    • Test: Wird das zum Problem wenn wir das mit run() einführen?


Was können sie wenn wir fertig sind?

  • Utility Objekt: readFile(aFilename), getUserInput(aPrompt)
    • JavaAPI lesen
    • Streams verschachteln
    • UtilityObjekt -> Reuse
  • Objekt / null / Initialisieren
  • main -> instanz -> run() (erklären wir später)?
  • Programm mit mehreren Dateien
  • sehen das das scheiße ist:
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
  • Lösungsstrategien Top->Down, Bottom->Up
    • Aufgaben angehen
    • Fehlerlösungsstrategien: NullPointerException, etc.
      • Was sagt denn der Fehler genau? Wie finde ich das raus?
      • Kaputter Code -> Der muss Korrigiert werden
        • n-mal das gleiche -> schleife / methode
    • Zu langer code -> kurz machen
  • Testen?: von main aufrufen, unittests, debuggen, printf-style
  • Was wissen die Leute am Schluss von Objekten?
    • Collections, Exceptions, Streams kennen
    • Konstruktoren, Instanzvariablen (vielleicht weglassen?)
    • Daten mit Methoden aussen herum (vielleicht)

Sprachkonstrukte die wir Behandeln und deren Reihenfolge

  • if
  • while, for ( <- Bis hier tag eins)
  • methode
  • try - catch / throws??
  • ++ oder +=, was noch? Oder gar nichts?
  • NICHT MACHEN: try {} cach (Throwable e) {}

Was wir nicht machen ABSICHTLICH

  •  :?, do{}while, ++i, switch,

Vielleicht haben wir noch Zeit hierfür?

  • SVN?
  • static / instanz -> Ebenen modell

Aufgaben die wir Stellen

  • UtilityObjekt mit readFile(aFilename) und getUserInput(aPrompt)
  • Apfelbaum
while (apfelbaumHatNochÄpfel) {
	pflückEinenApfelUndEssIhn();
}
  • Collections, Polymorphie (Apfel mit Wurm....)