Martin Häcker/Java Kurs/Tag 1
Inhaltsverzeichnis
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
weitere Ideen
- Lernende einbeziehen durch Befragung mit Zetteln, was sie sich vorstellen unter "Programmieren"
- Kommentare //, /* */, /** */
- 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
Inhalt (Vorgehen, Beispiele, Ideen)
Java
Wie fangen wir Java an
- Hello world
grobe Struktur der "Umgebung": keine .sign/.impl Datei sondern nur eine .java
Bildchen für Was ist Was? Syntax zerlegen. 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
Entscheiden: Zuerst in println rechnen oder zuerst Variablen einführen. Semikolons,
- 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.
Das selbe GANZ kurz nochmal mit anderen Operatoren.
Sauberes Programmieren
- Variablen und Identifier-Namen
- Variablendeklaration - Namen vergeben für Dinge, die man berechnet hat!
String deklarieren mit "bla" , kein Anführungszeichen im "..."
verknüpfen von Strings (+)
komplizierteres Sysout an selbem Programm
- nicht explizit einführen, sondern nur im If mit Fallunterscheidung
erweitertes Miniprogramm zur Fallunterscheidung
- <, >, ==, <=, >= Operatoren
if mit Operatoren und anderen Variablen
- if -> Syntax
Minniprogramm zur Fallunterscheidung
boolean auwahl = true; if(auswahl) then { System.out.println("auswahl war true"); else{ System.out.println("auswahl war false"); }
- Blöcke/Gültigkeit von Variablen
- Kompliziertere Bedingungen (&&, ||, !)
- (double) mit Punkt als Trennzeichen.
- Division mit / und das bei int gerundet wird
- Kommentare
Fehlermeldungen lesen und verstehen
- Klammer vergessen
- Semikolon vergessen
- Klasse heißt anders als Datei
- Compiler falsch aufgerufen
Übungsaufgaben
- cd üben (ist drin)
- Hello World eintippen (kate, gedit, nano, ..) (ist drin)
- javac / java benutzen (ist drin)
- Ergebnisse sehen (ist drin)
- 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
- Fehler einbauen, Fehler finden (laufzeit/compilezeit)
- Beispiele für Anfängeraufgaben
Zusätzliche Vorschläge
Folgendes sollte in der VL oder Übung angesprochen werden:
- "Dangling else"-Problem
- Semikolon hinter if (hab gelesen, dies sei ein häufiger Fehler bei Anfängern...)
-- Robert Buchholz 01:17, 17. Mär 2006 (CET)
LE 2: Methoden und Schleifen (RobertB und Sven)
LE2 Übung mit Zusatzaufgaben und Musterlösung sind leider nichtmehr verfuegbar.
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:
- dadurch verbesserte test-möglichkeiten (sprich methoden sind auch eine art von modul)
- verbesserte verständlichkeit(Procedures as Black-Box Abstractions)
- 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?
- Arrays
- 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!
assertTrue-Methode selber schreiben
Ü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