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!

Martin Häcker/Java Kurs/Tag 1

<- Zurück zur Übersicht

LE 1: Hello, World!

Vortragende: Robert Lubkoll, Felix Schwarz

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 (Das soll sich durch den Kurs durchziehen als roter Faden für die Sprachfeatures die wir einführen):

  • Primitive Ausdrücke
  • Kombinationsmöglichkeiten
  • Abstraktionsmöglichkeiten

Java

Wie fangen wir Java an

  • Werte und operatoren +,*,/,-, % (?)
  • Wenige Variablentypen int, String, (double)
    • String: Vormerken, das man hier später klar macht das das auch Objekte und daher Referenzen sind - erstmal ists aber egal, da sie eh Immutable sind
  • Zuweisung
  • <, >, ==, <=, >=
  • if
  • Methoden vorgeben: Input, Output
  • Was passiert da, wieso erst Compilieren, dann ausführen
  • Live vorführen

Vorführung

Aufbau eines Java-Programms

Ein Beispiel bringen und daran erklären, was primitive Ausdrücke, Kombinationen und Abstraktionsmöglichkeiten sind. Das Programm dabei langsam entwickeln und dabei vorführen. Ziel ist, das am schluss ein komplettes Beispiel da steht - also alles verwendet wird was wir erklärt haben, es aber trotzdem so einfach bleibt das es ohne viel Fehlerpotenzial später nachgemacht werden kann.

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);
		// ....
	}
}


Methodik

Sauberes Programmieren

  • Variablen und Identifier-Namen
    • Variablendeklaration - Namen vergeben für Dinge, die man berechnet hat!
    • Lokale Namen und wieso: (vielleicht?) scrollen bis Local Names

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
  • Beispiele für Anfängeraufgaben

LE 2: Standardkonstrukte in Java (Robert und Sven)

Übungs-Aufgaben inklusive Vorgaben und Musterlösung LE2UEB

updated: freitag 2006-03-10 19:05

letzte änderungen: aufgabe 0 mit einigen methoden die sie fixen müssen, bzw. analyisieren sollen.

TODO: LE1 aufgabe benutzen. (delayed)

Inhalt

Methodik

Java

  • Typen
    • boolean (in LE 1, weil if sonst keinen Sinn macht)
    • Arrays
    • 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???
  • 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
  • Fehler für die eingeführten elemente

<- Zurück zur Übersicht