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

Version vom 17. März 2006, 13:51 Uhr von Martin Häcker (Diskussion) (Wie fangen wir Java an: kommentare erwähnen)

<- 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?

  • Lernende einbeziehen durch Befragung mit Zetteln, was sie sich vorstellen unter "Programmieren"
  • (Ideen gesucht die nicht zu abstrakt sind) imperativ (prozedural) vs. funktionales Programmieren
    • (Ideen gesucht die nicht zu abstrakt sind) relation problem <-> lösung / kochrezept
  • Zustandsmaschine, (jede Befehlsausführung führt zu einem neuen Zustand)
  • Einführung nach SICP Kapitel 1 (bis "Programming in Lisp")
  • TODO: zu etwas das wir einführend sagen können umformulieren.
    • Damit ist die Philosophie von Programmieren gemeint


  • eher später, wird vom Prinzip her aber in dieser Reihenfolge eingeführt:

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

  • Live vorführen (Screenshots oder zur Console wechseln)
  • Kommentare //, /* */, /** */
  • Hello world

grobe Struktur der "Umgebung": keine .sig/.impl Datei sondern nur eine .java

system.out.println();

  • compilieren:

Was passiert da, wieso erst Compilieren, dann ausführen? javac java

was für Fehler können auftreten? .class Klasse heißt anders als Datei Compiler falsch aufgerufen


  • Variablentyp (int) -> Syntax der Deklaration

Wie darf ein Variablenname aussehen? (Buchstaben,Zahlen, _ )

  • Zuweisung -> Syntax

man kann Zahlen > 32 direkt eingeben !

  • Werte und operatoren +,*,- -> Syntax
int zahl1 = 7;
int zahl2 = 42;
int ergebnis = zahl1 + zahl2;
System.out.println(ergebnis);

Zuweisung nach Deklaration. Variableninhalte ändern sich durch Zuweisung. Zeigen mit sysout.

Selbse GANZ kurz nochmal mit anderen Operatoren.

  • 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

String deklarieren mit "bla" , kein Anführungszeichen im "..."

verknüpfen von Strings (+)

komplizierteres Sysout an selbem Programm

  • boolean (true/false)
  • if -> Syntax

Minniprogramm zur Fallunterscheidung

else

erweitertes Minniprogramm zur Fallunterscheidung

  • <, >, ==, <=, >= Operatoren die boolean zurückliefern

if mit Operatoren und anderen Variablen

  • Kompliziertere Bedingungen (&&, ||, !)
  • (double) mit Punkt als Trennzeichen.
  • Division mit / und das bei int gerundet wird
  • Semikolons, Kommentare

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

Zusätzliche Vorschläge

Folgendes sollte in der VL oder Übung angesprochen werden:

-- Robert Buchholz 01:17, 17. Mär 2006 (CET)

LE 2: Methoden und Schleifen (RobertB und Sven)

Übungs-Aufgaben inklusive Vorgaben und Musterlösung LE2UEB

updated: freitag 2006-03-17 10:44

letzte änderungen: folien version1 enthalten.

TODO: LE1 aufgabe benutzen. (delayed)

Benötigete Zeiten: <noch niemand hats probiert?>

Inhalt

Methodik

  • Wichtigkeit, dass man Programme in verständliche und sinnvolle Teile unterteilt:
  • Quelltextverkürzung durch schleifen
    • nicht minimierung auf kosten der verständlichkeit
    • was ist aufgabe des entwicklers?
    • und was ist aufgabe des compilers? (vllt. auch nicht?)
    • evtl. ist eine eigene methode sinnvoller/verständlicher?

Java

  • Typen
    • Arrays
      • warum, wie und probleme
    • void
    • char?
  • Methoden:
    • Namen
    • Aufruf
    • Parameter und Rückgabe -> Call by Value
    • main
    • return
    • Nachtrag Datenstrukturen: void
    • Beispiel: System.out.println()
  • Schleifen
    • Blöcke
    • while
      • Formulieren von Bedingungen
      • 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
    • for schleife, wann und wozu, einfache beispiele: 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 lassen und leicht verwirren
    • abwägen zwischen
      • aussagekraft des namens
      • häufigkeit im code
      • kommentar zu variable(nnamen)
      • länge des namens
  • Testen
  • was ist testen?
    • überprüfung von einigen randwerten => nachdenken ist erforderlich um interessante fälle zu finden
    • testen ist nicht verifizieren
  • wie in java?
    • System.out.println(..);
    • auskommentieren und schrittweises testen
  • was wird getestet?
    • ausgabe von arrays komplex
    • ausgabe von werten mit text verknüpfen
    • Variablen haben unterschiedliche Werte während das Program läuft!

assert-Methode selber schreiben -> Später! (WANN?)

Ü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